トップページ⇒tech
1002コメント330KB

C++相談室 part119 [転載禁止]©5ch.io

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん2015/08/31(月) 18:19:04.13ID:NE3NvROE
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。

前スレ
C++相談室 part118
http://peace.2ch.net/test/read.cgi/tech/1435970316/

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.97【環境依存OK】 [転載禁止]©2ch.net
http://peace.2ch.net/test/read.cgi/tech/1439849418/

次期規格C++1zはこちら
C++14/C++1z 20
http://peace.2ch.net/test/read.cgi/tech/1410382924/

■長いソースを貼るときはここへ。■
 http://codepad.org/
 http://ideone.com/
0002デフォルトの名無しさん2015/08/31(月) 18:19:24.65ID:NE3NvROE
STLつかうと一気に実行ファイルサイズが10倍に?!

環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない

すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。

C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?

#include <stdafx.h>
後死ね。

言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
0003デフォルトの名無しさん2015/08/31(月) 19:14:01.72ID:5EwNZntw
>前スレ984
throw()は無駄な処理を削減してないだろ
無駄な処理を削減したのはnoexcept
0004デフォルトの名無しさん2015/08/31(月) 19:16:45.24ID:LIRnTqik
前スレ >>999
>「富豪的プログラミング」を洗脳的に刷り込まれたやつが書くコードが
>世の中をどんなに減速しているか、わかってからでは遅いしね
指摘してる方法も富豪的だから見当違いだぞ
0005デフォルトの名無しさん2015/08/31(月) 19:31:48.85ID:5ehxqyCu
http://marupeke296.com/OOD_No8_SceneOperation.html
ここのサイトにあるデータコンテナというものを実装しようと思い
std::shared_ptr<void>型にデータへのポインタを格納しようとしたのですが
データの領域を確保するときに、
datacontainer.push_back(malloc(size));
とするとnewで確保していないのでshared_ptrのdeleteが機能しませんよね?
newでサイズを指定して確保することは出来ますか?
それとも他に良い方法があるでしょうか?
0006デフォルトの名無しさん2015/08/31(月) 19:47:09.78ID:7HL3lB9q
>std::shared_ptr<void>

リンク先は見てないけど
そのサイトはきっと糞だろ
0007デフォルトの名無しさん2015/08/31(月) 19:59:45.08ID:fU5zBptm
普通は仮想デストラクタを持った基底クラスBを作って
std::shared_ptr<B>にして
他のオブジェクトはBから派生させる
0008デフォルトの名無しさん2015/08/31(月) 20:08:38.97ID:LIRnTqik
>>5
読んだけどシリアライザ・デシリアライザでググった方が良いかも
0009デフォルトの名無しさん2015/08/31(月) 20:10:42.59ID:LIRnTqik
すまん、直列化でググったほうが引っかかる
0010デフォルトの名無しさん2015/08/31(月) 22:06:38.27ID:4UR705Ml
>>4
どうしてそう思います?
0011デフォルトの名無しさん2015/08/31(月) 22:13:30.93ID:GshNEBF9
>>5
>newで確保していないのでshared_ptrのdeleteが機能しませんよね?

いえそんなことはありませんpush_backの実装次第です
0012デフォルトの名無しさん2015/08/31(月) 22:17:39.10ID:LIRnTqik
>>10
どうしてって…フリーリストの処理と
無駄なメモリを確保しておくのは同じぐらい富豪的だろ
0013デフォルトの名無しさん2015/08/31(月) 22:33:11.25ID:fIQY5cyk
20年くらい前のとある弾幕シューティングゲームは
画面に表示するタマが256個上限で固定長メモリ上にフリーリストと確保済みリストを構築していた
あんま富豪じゃない
0014デフォルトの名無しさん2015/08/31(月) 22:34:56.89ID:4UR705Ml
>>12
どうしてですか?
std::mapの1エントリが、一体どれだけのメモリ量なのか、計算してください
まず、保持すべき整数値IDとポインタで8バイト、
木なので最低でもrightとleftが有るので+8バイト
加えてエントリはnewで確保されるので、頭に管理領域が付く

一方、std::vectorなどで配列で管理する場合、
1エントリに付きポインタ1つの容量なので、4バイト

つまり、配列をかなり無駄遣いしたとしても、配列の方がメモリ量は少ない
0015デフォルトの名無しさん2015/08/31(月) 22:35:02.50ID:LIRnTqik
それ静的なリソースじゃなくてオブジェクトの管理だろ
0016デフォルトの名無しさん2015/08/31(月) 22:39:37.35ID:LIRnTqik
>>14
上限が決まっていない配列は拡張の度に確保する羽目になる
速度を求めるなら、大きさはだいたい2倍ずつになる(pythonなどもそう)
はっきり言って無駄

ってかフリーリスト何処行ったんだよ…本当自分の意見は適当な野郎だな
0017デフォルトの名無しさん2015/08/31(月) 22:48:52.48ID:4UR705Ml
>>16
配列の、その無駄よりも、mapの方が、メモリが無駄になるって>>14で計算して見せただろ

あと、フリーリストって言う名前で書いたけど、これももちろん配列だから

IDやハンドルをポインタに変換するのに、配列を使う方法は、
もっとも効率的な方法なのに、これを富豪的と言われてしまってはね
他に効率的な方法が無いのにどうしろと
もちろん、ポインタの値を生で使えば、もっとも効率的ではある
変換して無いので、今回のテーマにはそぐわないが
0018デフォルトの名無しさん2015/08/31(月) 22:52:48.87ID:BMYxuVz1
えっ?
フリーリストって配列要素の中に前と後ろの二つのポインター持つんじゃないの?
0019デフォルトの名無しさん2015/08/31(月) 22:55:47.52ID:LIRnTqik
>>17
「配列だから」って…あのなあ
フリーリストは文字通りリストで配列じゃないだろ
配列で実装はできるが、最悪管理する配列と同数の上限付きスタックになる
0020デフォルトの名無しさん2015/08/31(月) 23:04:41.29ID:LIRnTqik
そして勝手に自分でリソースID割り振る前提で進めてるが、
固定の離散値の場合はどうするんだ
変換用のMapでも作るつもりか?
0021デフォルトの名無しさん2015/08/31(月) 23:12:33.08ID:4UR705Ml
>>18
何か知らんが、フリーリスト用の配列に、開放されたリソースのIDをpushしておけばよいだけ
新規リソースにIDを割り当てる時は、フリーリストから1つ取ってきて、割り当てればよい

面倒ならフリーリストはなくても良いだろうな
この場合、IDを割り当てるたびに、先頭から空いているIDを探さなければならないが、
配列は連続したメモリ領域なので、この処理はキャッシュに乗りやすい類の処理だ
一方で、mapへの追加は、想像よりも遅いだろう
挿入箇所を探すのに、値を比較をしながら、ポインタをたどらなければならない(キャッシュに乗りにくい)
大体は赤黒木なので、バランスをとる作業も入る
毎回newが発生する
ちなみに赤黒木はこんな感じのアルゴリズム
http://www.moon.sannet.ne.jp/okahisa/rb-tree/
0022デフォルトの名無しさん2015/08/31(月) 23:14:33.96ID:4UR705Ml
>>19
>配列で実装はできるが、最悪管理する配列と同数の上限付きスタックになる

そういったワーストケースでも、std::mapよりもメモリ効率が良い事は>>14で計算したが
0023デフォルトの名無しさん2015/08/31(月) 23:19:39.84ID:LIRnTqik
>>21-22
あのな、そもそも想定のリソースはポインタだぞ?
構造体ならわかるが、ポインタに速度なんて必要ないんだよ

そしてフリーリストのワーストケースはメモリに関しては4nだろ
自分で管理するコストを乗せたら余りあるぐらい無駄
しかも離散値が絡んだら全変更

お前本当都合よく話進めるな
0024デフォルトの名無しさん2015/08/31(月) 23:27:34.44ID:LIRnTqik
画像リソースそのものじゃなく、ポインタの確保にフリーリストとか
頭おかしいわほんと
0025デフォルトの名無しさん2015/08/31(月) 23:30:09.30ID:GshNEBF9
IDが自プログラム外で採番されることは良くあるが
それについて>>21が言及した姿を見た者はいないのであった
0026デフォルトの名無しさん2015/08/31(月) 23:32:54.34ID:4UR705Ml
>そしてフリーリストのワーストケースはメモリに関しては4nだろ

std::mapがどれだけメモリを無駄遣いするかは、>>14で計算している
1エントリについて、最低でも20バイトは必要なので、
その言い方だと、最低でも20nになる
newの管理領域次第で、もっと悪くなる

>あのな、そもそも想定のリソースはポインタだぞ?
>構造体ならわかるが、ポインタに速度なんて必要ないんだよ

もう、なにいってるか意味不明でしょう?
これが底辺C++erなのか
0027デフォルトの名無しさん2015/08/31(月) 23:38:12.87ID:LIRnTqik
>>26
>その言い方だと、最低でも20nになる
なんで20「バイト」が「n」になるんだよ…
頭おかしすぎてもうついていけないわ俺…
0028デフォルトの名無しさん2015/08/31(月) 23:43:50.15ID:LIRnTqik
そうそう、そんなにフリーリストが好きなら、どうぞ使って下さい
自分は別に困らないので
0029デフォルトの名無しさん2015/08/31(月) 23:47:08.58ID:4UR705Ml
単位を書かないお前が悪いんだろ
フリーリストの最大サイズは、すべての要素が開放された時で、
n個の要素になる
1つの要素はintで4バイトだから、4nと推測したのだが

フリーリスト付きの配列で、n個格納するのに、
最大で4nの要素が必要と言う意味かね
これでもstd::mapの方がメモリ効率が悪いことには変わりないが
0030デフォルトの名無しさん2015/09/01(火) 00:06:41.75ID:W5JS3HZb
dlmalloc
GNU Cライブラリ (glibc) の malloc は、dlmalloc を元に作られている
chunk および利用中フラグがあるため、8バイトまたは16バイトのオーバヘッドを含めたメモリ確保が必要である。
アロケートされていないchunkも他のフリーなchunkへのポインタを持つため、chunkの最小サイズは24バイトとなっている

つーわけで、std::mapの、1エントリは、上記のnewのオーバーヘッド + ID、ポインタ、left、right、などが必要なので、
相当なサイズになることが分かってもらえるだろうか
一方で、配列でする場合は、1エントリ4バイトで済む
余程の無駄遣いをしない限りは、配列の方がメモリ効率が良いし、オマケに速度も速いのだ
0031デフォルトの名無しさん2015/09/01(火) 00:09:22.12ID:Ba8p7FNG
アルゴリズムの文脈なのにnで通じないと
相手を底辺と言うだけありますね

で、そこから離散値はどうするのかな?
さらに木構造にでもする?
0032デフォルトの名無しさん2015/09/01(火) 00:11:53.02ID:Ba8p7FNG
>>30
なんか自己満足仕様で勝利宣言してるしこの人…
0033デフォルトの名無しさん2015/09/01(火) 00:19:58.95ID:Ba8p7FNG
>一方で、配列でする場合は、1エントリ4バイトで済む
だからならねえって、ちょくちょく虚言吐くなあ
癖なの?
0034デフォルトの名無しさん2015/09/01(火) 01:11:45.51ID:0+ju4But
新たなタイプの触っちゃいけない人が出てきたなあ…
0035デフォルトの名無しさん2015/09/01(火) 01:37:17.37ID:Ba8p7FNG
実際は開放されないって事がすっぽり抜けてるのかな
…いや絶対わざと言ってるなこれ
0036デフォルトの名無しさん2015/09/01(火) 01:52:06.05ID:GHEmL8/j
>>3
throw() でも無駄な処理が消えることあるよ。
https://goo.gl/crS9gO
https://goo.gl/BMmqFt
0037デフォルトの名無しさん2015/09/01(火) 02:10:03.23ID:fDCmPfsg
ワタシ思うに、両方やって、比べればいいと思う、アルよ

机上論の応酬などいくらやっても無駄
故人曰く案ずるより産むが易しってな
0038デフォルトの名無しさん2015/09/01(火) 08:08:03.99ID:olKwiEx6
曖昧な要件にオレオレ仕様加えて俺の勝ち〜

まあ、よく見る光景ですなw
0039デフォルトの名無しさん2015/09/01(火) 08:20:35.50ID:p5lCrfoJ
>>36
消えてねーだろ
984の主語は呼び出し側じゃなくて呼ばれた方だぞ?
0040デフォルトの名無しさん2015/09/01(火) 09:28:03.11ID:GHEmL8/j
>>39
ん?・・・リンク先見直したけどやっぱり7命令ほど削れてるよね?
主語?・・・いま974から見直してもそんなの書いてないと思うんだけど・・・見落としてたらごめんね。
0041デフォルトの名無しさん2015/09/01(火) 12:19:42.42ID:CdEi71Zr
モデルクラスってデータ構造を持つべき?
それとも持つべきではない?
0042デフォルトの名無しさん2015/09/01(火) 18:28:43.15ID:zo1v2bDs
>>41
まずそのモデルクラスとやらが何なのか定義を聞こうか
0043デフォルトの名無しさん2015/09/01(火) 19:08:10.13ID:4KR7vAAo
定義を決めてもらわないと回答もできないようじゃ三流
0044デフォルトの名無しさん2015/09/01(火) 19:30:56.55ID:pwoXX+fq
まずその三流とやらが何なのか定義を聞こうか
0045デフォルトの名無しさん2015/09/01(火) 21:26:17.28ID:jc1TnNJe
モデルクラスってあまり聞かない言葉だね。
一般的な用語から入らないとレス付かないと思うな。
0046デフォルトの名無しさん2015/09/01(火) 21:57:34.27ID:pYMkwSaE
造語だったりしてw
0047デフォルトの名無しさん2015/09/01(火) 22:07:22.53ID:AdYeXoWK
昔ながらのMVC開発のモデルなら
データ構造をメンバーとして持つ感じじゃないか
最近のなんやらかんやらは知らんが
0048デフォルトの名無しさん2015/09/01(火) 22:09:34.18ID:AdYeXoWK
つかMVCってC++でやることってあるの?
昔Javaを使ったWebの開発現場では煩い位に聞いたけど
0049デフォルトの名無しさん2015/09/01(火) 22:14:30.02ID:nXuOkFi0
特定の文脈でしか通じない用語を
断り無しに連発するのは馬鹿の特徴
0050デフォルトの名無しさん2015/09/02(水) 00:21:31.48ID:TZYcxUIB
チンピラの群れがお互いに喧嘩を売って歩くスレ
0051デフォルトの名無しさん2015/09/02(水) 08:20:41.73ID:8HjhIrCM
お互い売るけど、どちらも買わない
0052デフォルトの名無しさん2015/09/02(水) 11:40:01.60ID:3Er4L3kb
#include<iterator>
#include<fstream>
#include<iostream>
int main(){
std::ifstream f{"abc"};
std::istream_iterator<unsigned char> i{f};
for(auto a=0;a<5;++a)
std::cout<<" "<<std::hex<<static_cast<int>(*i++);
return 0;
}

このコードでabcという名前の読み込むファイルの中に16進数で0Cがあると
なぜか表示されなかったり0が2個になったりします
何がわるいのですか?
g++とclang++で試しました
0053デフォルトの名無しさん2015/09/02(水) 11:52:12.56ID:3Er4L3kb
自己解決しました
0054デフォルトの名無しさん2015/09/02(水) 12:00:08.37ID:3Er4L3kb
直ったと思ったら勘違いでした
教えてください
0055デフォルトの名無しさん2015/09/02(水) 12:17:49.56ID:3Er4L3kb
こんどは直りました
ありがとうございます
0056デフォルトの名無しさん2015/09/02(水) 12:19:48.06ID:kvoheval
どういたしまして
0057デフォルトの名無しさん2015/09/02(水) 12:22:36.42ID:RN6F+W1d
>>54
istream_iteratorは>>演算子によって文字を読取るため、0x0cのようなホワイトスペース文字は
スキップする

こいつを読み取らせるにはバイナリ入出力を使う

#include <fstream>
#include <iostream>
#include <iomanip>

int main()
{
std::ifstream f {"abc.txt", std::ios::in | std::ios::binary};
int x;
// std::istream_iterator<unsigned char> i {f};
// for (auto a = 0; a < 5; ++a)
// std::cout << " " << std::hex << static_cast<int>(*i++);
while ((x = f.get()) != EOF) {
std::cout << " " << std::setw(2) << std::setfill('0') << std::hex << x;
}
}
0058デフォルトの名無しさん2015/09/02(水) 12:25:51.06ID:3Er4L3kb
unsetf(std::ios::skipws)でできましたよ
0059デフォルトの名無しさん2015/09/02(水) 12:26:31.09ID:RN6F+W1d
>>58
同じことだな
0060デフォルトの名無しさん2015/09/02(水) 12:29:04.68ID:RN6F+W1d
他の方法としてはstd::noskipwsをその都度指定するか

http://www.cplusplus.com/reference/ios/skipws/
0061デフォルトの名無しさん2015/09/02(水) 12:29:52.92ID:kvoheval
や っ ぱ ス ト リ ー ム は ク ソ だ わ
0062デフォルトの名無しさん2015/09/02(水) 12:34:52.18ID:RN6F+W1d
慣れの問題だろ
istream_iteratorが>>演算子を内部で使ってるとちゃんと書いてある本を持ってれば分かる話
0063デフォルトの名無しさん2015/09/02(水) 12:37:36.59ID:pfz+JPDH
>>47
ありがとう
モデルってビジネスロジック書くところだと勘違いしてた
もろにデータ構造そのものを指すんだな
0064デフォルトの名無しさん2015/09/02(水) 13:03:07.04ID:spisOxh2
>>62はどういう意味ですか?
0065デフォルトの名無しさん2015/09/02(水) 13:39:30.67ID:3Er4L3kb
<<を使わないために
istreambuf_iteratorを使いたいんですけど
ifstreamのrdbuf()をイテレーターの初期化にしてもできませんでした
0066デフォルトの名無しさん2015/09/02(水) 19:01:21.83ID:I203tbc8
慣れの問題と思ってる奴はバカ
iostreamが糞なことに気づかないようではどうしようもない
0067デフォルトの名無しさん2015/09/02(水) 20:13:37.89ID:+ga1UiZL
すいません初心者なんですけど
クラステンプレート質問させてください

例えば
templat e<class Type>
class A {
Type a;

public:
A() : Type() {};
もしくは
A(Type x = Type()) {};
}

みたいなイニシャライザやデフォルトテンプレート引数の場所に出てくる
Type() <- 括弧の中に何も入ってない
の意味を教えて下さい
本読んでも唐突に出てきてネット調べてもわからないです
両者が同じものなのか違うものかもわかんないです
0068デフォルトの名無しさん2015/09/02(水) 20:14:35.25ID:+ga1UiZL
;の付け方グチャグチャだったけどそこはスルーしてください…
0069デフォルトの名無しさん2015/09/02(水) 20:36:41.71ID:4+szYIhP
>>67
コンストラクタ呼び出し
0070デフォルトの名無しさん2015/09/02(水) 20:42:45.88ID:ygSRnlxE
>>67
Type()はデフォルト初期化だよ
TypeがPODならゼロ初期化されるし、そうじゃなければデフォルトコンストラクトされる
0071デフォルトの名無しさん2015/09/02(水) 20:45:27.50ID:ygSRnlxE
>>67には
;以外にも色々おかしいところはあるけどType()の意味は上の通り
0072デフォルトの名無しさん2015/09/02(水) 20:54:19.65ID:+ga1UiZL
回答有難うございます
いただいた回答で意味が判りましたありがとうございます

自分で判った間違いは直しました、なんとなく気持ち悪いので
template <class Type>
class A {
Type a;

public:
A() : a(Type()) {}
もしくは
A(Type x = Type()) {}
};

そもそも初心者スレで聞くべきだったかもしれませんすいませんありがとうございます
0073デフォルトの名無しさん2015/09/02(水) 21:52:05.05ID:m/gpmXab
なんでもいいが、俺なら

template <class Type>
class A {
private:
  Type _a;

public:
  A() : _a() {}
};

と書く
Typeのコンストラクタを呼ぶというより、_aをデフォルトコンストラクタで初期化しといたやでという意味で書いてるから。
>>72の書き方だとコピーコンストラクタを呼ぶことになるのでは?
0074デフォルトの名無しさん2015/09/02(水) 22:18:06.66ID:HOyUHIr6
>>70
どうしてそう息を吸って吐くようにウソが出てくるんだ?
0075デフォルトの名無しさん2015/09/02(水) 22:47:41.96ID:1DlJs2CJ
>>73
コンストラクタを呼んじゃいけないという
おまえの脳内前提で質問されても
0076デフォルトの名無しさん2015/09/02(水) 23:14:30.27ID:ygSRnlxE
>>74
具体的にどうぞ
どう言えば正しいのかまで
それが出来ないならお前はクズの中のクズ
0077デフォルトの名無しさん2015/09/02(水) 23:19:25.72ID:HOyUHIr6
>>76
規格の定義と異なる嘘を並べておいて随分と横柄な態度だな
仕様を読み間違えたとかじゃなくて知らないくせにテキトー抜かすのは
止めた方がいいぞ
0078デフォルトの名無しさん2015/09/02(水) 23:20:58.11ID:ygSRnlxE
>>77
で?
0079デフォルトの名無しさん2015/09/02(水) 23:34:08.05ID:0+j6o+Dn
>>78
レス止めたほうがいいってよ(´・ω・`)
0080デフォルトの名無しさん2015/09/02(水) 23:42:02.07ID:urmqHodw
大きく出る割に話がピーマン
0081デフォルトの名無しさん2015/09/03(木) 00:34:33.32ID:iQnjIkb4
具体的には説明できないがお前は間違っている!!!
0082デフォルトの名無しさん2015/09/03(木) 00:42:05.98ID:CZJfW2V/
>>73
>>72だとxvalueでムーブコンストラクタが呼ばれるのでは?……と思ったけど、必ずしもムーブコンストラクタが定義されてるわけではない上に、デストラクタ明示したらムーブセマンティクスも明示しないと削除されるか(推奨であって規格ではない)
0083デフォルトの名無しさん2015/09/03(木) 00:45:59.94ID:SvUuACZU
荒れてるところ恐縮ですが質問してもいいですか?
class A {
B& b;
}
class B {
A& a;
}
こんなふうな相互に参照を持つことってできるのですか?
ポインタ使う以外に道はないですか?
0084デフォルトの名無しさん2015/09/03(木) 00:50:37.56ID:fKKhgssi
指摘した後に勘違いと気づいたパターン
0085デフォルトの名無しさん2015/09/03(木) 01:12:32.53ID:hDY8eKzg
>>83
class c
{
 class b;
 class a
 {
  b &b_ = *new b();
 };

 class b
 {
  a &a_ = *new a();
 };
};

これで一応動くけど、どうすんのこれ
0086デフォルトの名無しさん2015/09/03(木) 01:16:38.14ID:fKKhgssi
それ相互参照じゃない
というかムリ
0087デフォルトの名無しさん2015/09/03(木) 02:36:12.57ID:VxVmaHFN
仮引数をstd::stringへのconst参照にしてconst char*の文字列("...")を渡す動作はC++標準ですか?
0088デフォルトの名無しさん2015/09/03(木) 03:11:20.88ID:CZJfW2V/
標準。
プログラミング言語C++第4版の関数多重定義解決規則をみよ。
適合できない引数を暗黙変換できるならする。
そのさいに引数を1つとるコンストラクタにも入れ子式に適用される。
0089デフォルトの名無しさん2015/09/03(木) 03:20:02.37ID:fKKhgssi
暗黙変換はされるのは1回だけだよ
0090デフォルトの名無しさん2015/09/03(木) 04:07:13.75ID:SvUuACZU
>>85
そんな手がありましたか
でもdeleteは自分でしなきゃダメですよね

>>86
やはり、参照を使うのは無理ですよね
「相互参照」でググってもポインタを使う例ばかりですし

ありがとうです
0091デフォルトの名無しさん2015/09/03(木) 05:34:06.26ID:D704J011
>>83
ほれ
http://ideone.com/9VuNcJ
0092デフォルトの名無しさん2015/09/03(木) 07:13:38.72ID:1aBHaasU
プログラミング言語C++第4版というのはISO/IEC 14882:2014のことですか?
0093デフォルトの名無しさん2015/09/03(木) 08:22:08.15ID:ZCmiwbzV
あれやこれや言われてる>>72の正しい解答教えてくれんと僕眠れない
0094デフォルトの名無しさん2015/09/03(木) 09:36:59.35ID:SPzlieDS
組み込みでc++を使用しているのですが、
C++の標準ライブラリのcoutや、vectorを使用したいと思っています。
そのためには何らかのドライバの役割を果たすソースが必要ではないかと考えています。
どのようにすれば使用できるようになるのでしょうか。
0095デフォルトの名無しさん2015/09/03(木) 09:56:07.26ID:gfhZ4+hm
動作するSTLソース
0096デフォルトの名無しさん2015/09/03(木) 10:17:18.79ID:PXwT0hDa
ソース一覧

http://www.bulldog.co.jp/ ブルドックソース株式会社 東京都
http://www.kagome.co.jp/ カゴメ株式会社 愛知県
http://www.otafuku.co.jp/ オタフクソース株式会社 広島県
http://www.ikari-s.co.jp/ イカリソース株式会社 大阪府
http://www.kikkoman.co.jp/ キッコーマン株式会社 千葉県
http://www.oliversauce.com/オリバーソース株式会社 兵庫県
http://www.sky-net.or.jp/toshi/ カープソース 広島県
http://www.maruki-su.com/ 株式会社 川上酢店 愛知県
http://www.kozima.co.jp/ 小島食品製造株式会社 愛知県
http://www.komi.co.jp/ コーミ株式会社 愛知県
http://www.sankyohikari.co.jp/ サンキョーヒカリ 愛知県
http://www.junmaru.co.jp/ 株式会社 純正食品マルシマ 広島県
http://www.papaya-sauce.co.jp/ パパヤソース本舗 大洋産業株式会社 京都府
http://www.takahashisauce.com/ 高橋ソース株式会社 埼玉県
http://www.choko.co.jp/ チョーコー醤油株式会社 長崎県
http://www.timelyhit.ne.jp/ajiyoko/shop/sauce/sauce1.htm 阪神ソース株式会社 兵庫県
http://www.kyoto-thinking.co.jp/hirota/ 京風味ソース本舗 蛇ノ目食品廣田徳七商店 京都
http://www.optic.or.jp/com/fujiisauce/fujiisauce.html 有限会社 藤井ソース工場 岡山県
http://www2.neweb.ne.jp/wd/hikari/ ヒカリ食品 徳島県
http://www.hat.hi-ho.ne.jp/aokia/ 下北沢ビレッジソース 丸寿食品工業株式会社 東京都
http://www.yamayashokuhin.co.jp/ 山屋食品株式会社 東京都
http://brothersauce.com/ ブラザーソース森彌食品工業株式会社
http://www.asahi.co.jp/you/t20011026.html 神戸地ソース物語
【関連団体】
http://www.maff.go.jp/koueki/sougou/35/35.htm (社)日本ソース工業会
http://www.japan-tomato.or.jp/ 社団法人 全国トマト工業会
http://www.soysauce.or.jp/ 日本醤油協会
0097デフォルトの名無しさん2015/09/03(木) 10:35:36.61ID:Zp2ZXSAW
>>94
とりあえず試してみて、そのまま使えなようなら、コンパイラのマニュアルを読む。
0098デフォルトの名無しさん2015/09/03(木) 10:57:30.22ID:3MKID8ns
>>97
__dso_handleがどうのこうのでエラーが出ます
コンパイラはg++です。
マニュアルのインデックスをざっと見てみたのですが
セクションが多すぎて該当部分がわかりませんでした
0099デフォルトの名無しさん2015/09/03(木) 11:17:42.50ID:qqXcw9HH
組み込みでcoutなんかいるのか?
coutがすぐ使えないってことはベアメタルだよな
0100デフォルトの名無しさん2015/09/03(木) 11:22:18.14ID:BYrhbrh5
いるかどうかは問題にしてない
0101デフォルトの名無しさん2015/09/03(木) 11:23:37.79ID:SPzlieDS
>>99
OSでnewlibのサポートはあるのですが
C++ライブラリのサポートがないようなので何とかして使えるようにならないかと
coutは簡単にデバッグ用メッセージをコンソールに出力できたらいいなと
newlibではprintfが使用できます。
0102デフォルトの名無しさん2015/09/03(木) 11:33:23.42ID:gfhZ4+hm
標準ライブラリとSTLは別物。
どちらもビルド済みがコンパイラと同包されてるケースが多いが。
無ければ自らビルドするなりして組み込まないと動作するわけない。
0103デフォルトの名無しさん2015/09/03(木) 11:44:20.68ID:gfhZ4+hm
newlib STLでググった結果。
AVR 8ビットマイクロコントローラでSTLを動かす話かと。



AVR toolchain with GCC 4.8.1 and C++ STL support - Antoni Buszta

Building compiler
Building C Standard Library
Patch GCC sources
Building C++ Standard Library and other tools
http://antoni.buszta.info/2013/07/18/avr-toolchain-with-gcc-4-8-1-and-c-stl-support/
0104デフォルトの名無しさん2015/09/03(木) 12:03:05.07ID:UXgFNAqG
最近は、8bitマイコンでも、C++が動くのか?

びっくりした
0105デフォルトの名無しさん2015/09/03(木) 12:09:28.35ID:SvUuACZU
>>91
ありがとうございます
unionで何らかのポインタ(void*でなくてもよさげ?)をnull初期化してやれば、
参照(をメンバに持つクラス)をメンバに持つ場合でもいけるわけですね

配置newでthisを渡すというのも初めて知りました
自分にはちょっと技巧的すぎるやり方ですが、とても勉強になりました
0106デフォルトの名無しさん2015/09/03(木) 12:16:39.79ID:gfhZ4+hm
軽量なコード、システムを選択していけばいけるんじゃないの?やったことはない。

uClibc stl でググった結果。

uClibc++ C++ library
http://cxx.uclibc.org/status.html

Small scale C++ STL for embedded use
http://www.exactcode.com/site/open_source/embeddedstl/

Embedded C++ - Wikipedia
1990年代後半、組み込み用途への適用を目指して、肥大化したC++の仕様を必要最低限のものに絞り込んだサブセットが考案された。
一般的には、Embedded C++を用いた場合、C++よりプログラムをコンパクトにできる傾向がある。
0107デフォルトの名無しさん2015/09/03(木) 12:43:32.79ID:SPzlieDS
>>102
なるほど、iostreamは標準ライブラリでvectorはSTLになるのですね
ちなみに組み込み用(ARM)用のstdlibc++.aは存在します
その中で"objdump -C -t"してあげるとcoutのシンボルは存在しますがvectorなどは確かに見つかりませんね
>>103
どこでcoutの出力先やらメモリの動的確保の方法を指定しているのかがわからないですね
>>106
こんなのがあるんですね
0108デフォルトの名無しさん2015/09/03(木) 12:56:42.10ID:hDY8eKzg
8-bitマイコンってメモリ空間256バイトではないよね
なにをもって8-bitなの?
0109デフォルトの名無しさん2015/09/03(木) 13:20:30.95ID:gfhZ4+hm
STLといっても最終的にはCPUの基本命令まで翻訳されるわけで。
STLの実装・翻訳の過程で無駄がないとすると、STLを使わないものと遜色はないはず。
メモリや速度で難があるのは無駄があるだけ。
0110デフォルトの名無しさん2015/09/03(木) 14:47:23.71ID:UXgFNAqG
>>107
coutは標準出力。
ファイル・ディスクリプタ、0:標準入力(stdin)、
1:標準出力(stdout)、2:標準エラー(stderr)

メモリの動的確保は、reallocか、
free + malloc

>>108
CPUの命令長が、8bit
0111デフォルトの名無しさん2015/09/03(木) 16:50:12.14ID:rBNlqiiW
>>110
確かにそれは上位のレイヤーではそうなのですが
下位層を意識してみると
内部のコードを読んだことないので自分の中での理解なのですが
Linuxの場合
例えばprintfは文字列を処理してから
fd:1を引数としたwriteシステムコールで
文字列を出力しているなどしてるのかと思っています。
しかし、windowsでは別の文字列出力方法があると思います。
その環境ごとの文字列出力法の差異をどこで吸収するのか気になっています。
Newlibはおそらくwrite_r等と言う関数を定義することで環境の差異を吸収しているように見えました。
0112デフォルトの名無しさん2015/09/03(木) 18:06:39.67ID:zWhDxOK5
std::tuple< std::tuple<std::tuple.... *,int>> *, int >
自分自身のポインターを要素に持つtupleって出来ないんですか?
0113デフォルトの名無しさん2015/09/03(木) 18:23:10.49ID:hPxxKfzL
>>93
「Type()」はデフォルト初期化でなく値初期化
値初期化の過程でゼロ初期化されるかどうかはルールが複雑なので
ISO/IEC 14882:2014の8.5を読めとしか言えない
ただPODかどうかは関係ない
例えば
struct X {int a; protected: int b;};
はPODではないけれどゼロ初期化される
0114デフォルトの名無しさん2015/09/03(木) 18:51:40.41ID:XvCyn3hF
JAVAといっても最終的にはCPUの基本命令まで翻訳されるわけで。
JAVAの実装・翻訳の過程で無駄がないとすると、JAVAを使わないものと遜色はないはず。
メモリや速度で難があるのは無駄があるだけ。
0115NAS6 ◆n3AmnVhjwc 2015/09/03(木) 19:17:25.38ID:G+oloE/W
>>112
template<typename T> class hoge{};
hoge<hoge<int>*> n_inst;

??????
0116片山博文MZ ◆T6xkBnTXz7B0 2015/09/03(木) 19:21:44.93ID:un01NHO0
合わせ鏡みたいなタプル?
できるわけないだろ
0117NAS6 ◆n3AmnVhjwc 2015/09/03(木) 19:27:06.77ID:G+oloE/W
template<typename T, typename U> class hoge{};
hoge<hoge<int, int>*, int> tu_inst;

意味が分からん。それとも

template<typename T> class hoge{
public:
 T* m_p;
};
hoge<int> n_inst;
n_inst.m_p;//int*型
普通にこうしたいだけ?
0118NAS6 ◆n3AmnVhjwc 2015/09/03(木) 19:29:10.11ID:G+oloE/W
ていうか、論理が分からないのか、循環参照したがるんだよな
循環参照は不定なだけ
0119デフォルトの名無しさん2015/09/03(木) 20:34:41.66ID:YegStso1
むしろ>>112の説明で何がわからないのかがわからない。
出来ないとは思うけど
0120NAS6 ◆n3AmnVhjwc 2015/09/03(木) 20:43:03.17ID:G+oloE/W
>>119
int hogeeeeeee(int i){return hogeeeeeee(i);}
void main(){hogeeeeeee(1); return;}
これが戻り値が不定にならないと思うのと同じ
0121デフォルトの名無しさん2015/09/03(木) 20:44:02.06ID:fKKhgssi
>>91
おお、知らなかった
C++11でできるようになってたんだな
0122NAS6 ◆n3AmnVhjwc 2015/09/03(木) 20:50:29.42ID:G+oloE/W
テンプレートは動的でなく静的だからね
TempClass< float, 6 > test1; // OK
TempClass< char, items++ > test2; // Error, second parameter
// must be constant.
0123デフォルトの名無しさん2015/09/03(木) 21:03:10.32ID:D704J011
ちょっと考えたけど使い道無さそうだわ
http://ideone.com/hnYBeO
0124デフォルトの名無しさん2015/09/03(木) 21:04:11.91ID:yKj1FtgQ
#include <iostream>
#include<tuple>
using namespace std;

int main() {
using A=std::tuple<B*,int>;
using B=std::tuple<int,A*>;

return 0;
}
どうやってこのエラーを取り除けるのでしょうか?
0125デフォルトの名無しさん2015/09/03(木) 21:08:45.94ID:fKKhgssi
>>124
それは規格に無理と書いてある
0126デフォルトの名無しさん2015/09/03(木) 21:14:36.19ID:yKj1FtgQ
むりなんすか
ありがとうございました
0127NAS6 ◆n3AmnVhjwc 2015/09/03(木) 21:16:27.91ID:G+oloE/W
>>124
テンプレートは生成が静的だから完全解決できないと生成できません
プログラムコードも静的だから完全解決できないこういうコードはできません
int hoge(int i){return hage(i);}
int hage(int i){return hoge(i);}
void main(){int ret=hoge(1); return;}
hogeかhageかでif分岐などで解決しないと実行できません
で>>124みたいなテンプレートは↑こういう風に解釈されます
0128デフォルトの名無しさん2015/09/03(木) 21:31:53.50ID:fKKhgssi
>>126
14.5.7
>The type-id in an alias template declaration shall not refer to
>the alias template being declared. The type produced by an alias
>template specialization shall not directly or indirectly make use of
>that specialization.
要するにテンプレートの再帰型は直接であれ間接であれ使えない
0129NAS6 ◆n3AmnVhjwc 2015/09/03(木) 21:47:39.21ID:G+oloE/W
どういうのがやりたいのかわからんけど、↓でそれの何ができないの?
class base{
public:
 base(base& n){m_p=&n;}
 base* m_p;
};
class A : public base{
public:
 A(A& n) : base(n){;}
};
class B : public base{
public:
 B(B& n) : base(n){;}
};
0130デフォルトの名無しさん2015/09/03(木) 22:00:58.39ID:ujbBBsKz
コテハン=キチ○イ の法則
0131NAS6 ◆n3AmnVhjwc 2015/09/03(木) 22:06:39.08ID:G+oloE/W
>>129
でA←→Bの相互通信がしたいなら
messengerクラスを独立に作ればいいだけ
0132NAS6 ◆n3AmnVhjwc 2015/09/03(木) 22:09:18.49ID:G+oloE/W
 base* m_p;
つかこれはthisポインタだな
0133NAS6 ◆n3AmnVhjwc 2015/09/03(木) 22:12:34.19ID:G+oloE/W
要するにクラス参照の持ち合いなんて
baseクラスからAとBを派生させて
独立なメッセージクラスで通信すりゃあいいんだよ
0134NAS6 ◆n3AmnVhjwc 2015/09/03(木) 22:19:52.99ID:G+oloE/W
abstract factoryパターンだろ
0135デフォルトの名無しさん2015/09/03(木) 22:22:17.51ID:hvDmk3I7
この馬鹿はさっきから何言ってるの?
ビョーキなの?
0136NAS6 ◆n3AmnVhjwc 2015/09/03(木) 22:39:04.34ID:G+oloE/W
要するにAとBのクラス参照の持ち合いなんて
baseクラスからAとBを派生させて
独立なメッセージクラスで通信すりゃあいいんだよ
デザインパターンではabstract factoryパターンだろ
そのまんまだよ
0137デフォルトの名無しさん2015/09/03(木) 23:14:36.34ID:fKKhgssi
なんのこっちゃ
0138デフォルトの名無しさん2015/09/03(木) 23:18:52.70ID:yR6wfki7
1) 釣りである
2) 知ったかしなきゃ死ぬ病気である
3) 本屋にくるおしゃべり天使みたいにスレでもうわごとレスを止められない
4) 本人はまじめだが知能がいちじるしく低い
0139NAS6 ◆n3AmnVhjwc 2015/09/03(木) 23:24:43.23ID:G+oloE/W
class base{
public:
 int m_val;
 base(int i):m_val(i){;}
 virtual int func(int i){return i;}
};
class add:public base{
public:
 int func(int i){return m_val+i;}
};
class sub:public base{
public:
 int func(int i){return m_val-i;}
};

base *p,*q;//abstract factoryパターン
int r;//メッセージクラス
p=new add(21); r=p->func(7);
q=new sub(r); r=q->func(7);
0140NAS6 ◆n3AmnVhjwc 2015/09/03(木) 23:34:56.29ID:G+oloE/W
class base{
public:
 int m_val;
 base(int i=0):m_val(i){;}
 virtual int func(int i=0){return i;}
};
class add:public base{
public:
 int func(int i=0){return m_val+i;}
};
class sub:public base{
public:
 int func(int i=0){return m_val-i;}
};

base *p,*q;//abstract factoryパターン
int r;//メッセージクラス
p=new add(21); r=p->func(7);
q=new sub(r); r=q->func(7);

intを任意のクラスにしたらなんか色々出来そうだろ
0141NAS6 ◆n3AmnVhjwc 2015/09/03(木) 23:41:00.21ID:G+oloE/W
ありゃ、コンストラクタ忘れた
class base{
public:
 int m_val;
 base(int& i=0):m_val(i){;}
 virtual int func(int i=0){return i;}
};
class add:public base{
public:
 add(int& i=0):base(i){;}
 int func(int i=0){return m_val+i;}
};
class sub:public base{
public:
 sub(int& i=0):base(i){;}
 int func(int i=0){return m_val-i;}
};

base *p,*q;//abstract factoryパターン
int r;//メッセージクラス
p=new add(21); r=p->func(7);
q=new sub(r); r=q->func(7);

intを任意のクラスにしたらなんか色々出来そうだろ
0142デフォルトの名無しさん2015/09/03(木) 23:56:33.17ID:fKKhgssi
薬飲んだらすぐ寝ないと駄目だぞ
0143デフォルトの名無しさん2015/09/04(金) 00:38:45.05ID:ye/5uETN
>>112
これでどう?

#include <tuple>
struct S;
typedef std::tuple<S> TS;
struct S { TS* p; };

TS loop{S{&loop}};
0144デフォルトの名無しさん2015/09/04(金) 00:53:27.48ID:ye/5uETN
>>83
なんか変な回答ついてるけど、ふつうに↓でコンパイル通るよ。
class B;
class A {
B& b;
};
class B {
A& a;
};
0145デフォルトの名無しさん2015/09/04(金) 01:15:43.42ID:IG+8/rPl
循環【参照】か
0146NAS6 ◆n3AmnVhjwc 2015/09/04(金) 01:16:03.14ID:tzKKrHnI
>>144

それだと、どちらかを先に完全確定する必要があるんだけど
まぁ、とりあえずデフォルトコンストラクタでもいいけど
実体作った後でもいいけど、A,Bはどんな状態遷移すると思う?

class B;
class A {
 int m_val;
 B& m_b;
 A(){;}
 A(B& b):m_b(b){;}
};
class B {
 int m_val;
 A& m_a;
 B(){;}
 B(A& a):m_a(a){;}
};

A a();
B b(a);
a.m_b=b;

これで、マルチスレッド環境だったりしたら、かわいそうなことに・・・
0147デフォルトの名無しさん2015/09/04(金) 01:27:40.32ID:1ELVgZ8Y
>>144
相互に参照を持つように初期化したいという意図だろうから
それじゃ回答になっていないし、他の人が既に回答済み
0148NAS6 ◆n3AmnVhjwc 2015/09/04(金) 01:28:13.61ID:tzKKrHnI
志村Kんの志村、後ろ、後ろ、状態
0149NAS6 ◆n3AmnVhjwc 2015/09/04(金) 01:36:42.35ID:tzKKrHnI
循環参照する必要があるなら
アブストラクトファクトリパターンで
シングルトンパターンのメッセージクラスで
応答になるんだろ
0150デフォルトの名無しさん2015/09/04(金) 01:41:27.56ID:ye/5uETN
>>146-147
そういうことか。ありがとう。
いちおう↓こんなのはできるけど、これが望むものなのかどうかはやっぱりわかんないね。

class B;
struct A {
B& b;
};
struct B {
A& a;
};
struct Loop { A a; B b; } loop = {{loop.b}, {loop.a}};
0151デフォルトの名無しさん2015/09/04(金) 01:46:02.11ID:ye/5uETN
>150 よりこっちのがいいかな。
struct Loop { A a{b}; B b{a}; } loop;
0152デフォルトの名無しさん2015/09/04(金) 02:03:19.63ID:1ELVgZ8Y
それならc++03でもいけるね
コンストラクタ書く必要はあるけど
0153デフォルトの名無しさん2015/09/04(金) 03:33:33.23ID:CNzc1DB/
>>150
AもBも他のクラスのメンバとするならば、初期化で問題なくインスタンス化できるという話ですか?
いずれにしろAとBをマネージするクラスを作るのは避けられないですかね?

>>152
どちらもgccのc++03でいけましたが、>>151はc++03だと警告が出ました
コンストラクタは書かなくても大丈夫ではないですか?
0154デフォルトの名無しさん2015/09/04(金) 04:59:59.47ID:ukgXeb3f
>>153
どっちも参照しかもって無いんだから誰かが実体持つ必要があるだろ。
それは相互に参照してようがしてまいが変わらない
0155デフォルトの名無しさん2015/09/04(金) 05:04:41.54ID:1ELVgZ8Y
>>153
C++03でクラス化するにはコンストラクタがいるよ
それと試しにg++(gcc)でやってみたけど、
C++11でのみ有効な機能っていう警告が出たよ
それじゃなかった?
0156デフォルトの名無しさん2015/09/04(金) 06:17:53.16ID:rG9hvPUX
>>101
コンソールに出力すると
コンソールの通信速度に引っ張られて
プログラムの動作が遅くなる
デバッグだからと言って無闇に大量に出力しないように気をつけないといけない
0157デフォルトの名無しさん2015/09/04(金) 08:17:29.72ID:9mN0gzGK
余計なお世話だ
0158デフォルトの名無しさん2015/09/04(金) 08:58:14.87ID:voaTutYw
コンソールってバッファリングしてないのか?
0159デフォルトの名無しさん2015/09/04(金) 11:55:39.86ID:1AVS2Ktf
>>156
言うだけ無駄
どーしてもcoutと手段が目的化してる
0160デフォルトの名無しさん2015/09/04(金) 12:28:24.29ID:s9W6t8fF
やぱログに吐いた方がいいって事ですか
0161デフォルトの名無しさん2015/09/04(金) 12:30:58.91ID:8nJVYQKk
>>154
mainとかの関数内ではAやBのインスタンス作れないですよね?
何かしら方法あるのかな
0162デフォルトの名無しさん2015/09/04(金) 12:37:05.16ID:g9gAlQ8r
>>161
普通に作れるでしょ…
0163デフォルトの名無しさん2015/09/04(金) 14:48:15.68ID:yKUUH6cx
どうでもいいけどcerrじゃ
0164デフォルトの名無しさん2015/09/04(金) 17:07:42.09ID:ynK+SMBx
>>156
>>158
リングバッファに貯めて別タスクでワイヤレスのコンソールに吐き出させています
>>160
確かにそうかもしれません。
主目的は、標準ライブラリの移植です。
>>163
それでもかまいませんが
やらなくてはならないことは同じではないかと思いました。

ちなみにiostreamをヘッダファイルに加えると以下のようなエラーが出ます
hoge.cpp:(.text.startup+0x48): undefined reference to `__dso_handle'
/path/to/libstdc++.a(system_error.o): In function `_GLOBAL__sub_I__ZNSt14error_categoryC2Ev':
system_error.cc:(.text.startup._GLOBAL__sub_I__ZNSt14error_categoryC2Ev+0x4c): undefined reference to `__dso_handle'
0165デフォルトの名無しさん2015/09/04(金) 20:19:10.44ID:STCOa/Lw
STLをビルドして組み込め。実装はただひとつでなくいくつもある。動作するやつで。
0166デフォルトの名無しさん2015/09/05(土) 18:20:35.46ID:pkvC4koK
 
http://erosuga1.blog.fc2.com/blog-entry-3174.html

親戚のエロお姉さんとS◯Xwwwwwwwwwww
 
0167デフォルトの名無しさん2015/09/06(日) 23:13:13.97ID:kzoJkPUN
CのCHAR_BITに当たるものはC++だとなんですか
0168デフォルトの名無しさん2015/09/06(日) 23:59:11.69ID:TtEkoNQG
>>167 CHAR_BIT かな。
0169デフォルトの名無しさん2015/09/07(月) 19:34:51.82ID:XjY9JrjD
nextとhasNextはnextを実装するときコピーが必要だが終端がわかっていればnextだけで進める
moveNextとcurrentはcurrentを実装するときコピーはいらないが進むのにmoveNextが必要という
トレードオフがあると思いませんか?
0170デフォルトの名無しさん2015/09/07(月) 20:08:22.86ID:AAyuiqtl
奇遇だな
ちょうど俺もそう思っていたところだ
0171デフォルトの名無しさん2015/09/07(月) 21:24:45.26ID:107fD43G
え!?俺も昨日同じこと考えたとこだった!
0172デフォルトの名無しさん2015/09/07(月) 21:26:55.88ID:xAuYi2fm
ちょっと>>169が何言ってるかわからない
0173デフォルトの名無しさん2015/09/08(火) 10:01:21.06ID:LEkrsXyv
typelistの代わりにtuple使ってるんだけどなんかダサいから
typelistの可変引数版みたいなのを自作しようと思います
0174デフォルトの名無しさん2015/09/08(火) 12:57:45.86ID:rdzMyuc+
俺も俺も
0175デフォルトの名無しさん2015/09/10(木) 14:29:57.70ID:vNCRKT6f
unique_ptrで配列を使う場合、テンプレート引数はどうするんでしょうか?
unique_ptr<int> p(new int[3]);
unique_ptr<int[]> p(new int[3]);
はどちらもGNU C++11でコンパイルが通りますが、両者は同じですか?
0176デフォルトの名無しさん2015/09/10(木) 17:14:13.20ID:tn/zLcPl
>>175
前者は消滅時に変なdeleteが呼ばれるんじゃね
0177デフォルトの名無しさん2015/09/10(木) 18:13:22.19ID:vNCRKT6f
>>176
share_ptrの場合<int[]>だとコンパイルエラーになりますが、
unique_ptrは配列の特殊化があるので<int[]>にしないとダメということでしょうか?
0178デフォルトの名無しさん2015/09/10(木) 18:33:57.55ID:jMDA+bxl
はい
0179デフォルトの名無しさん2015/09/10(木) 19:52:32.49ID:Ubq2dser
shared_ptrってなんで配列の特殊化が用意されてないんだろうね
代わりにshared_arrayがあったと思うけど、要するに生配列なんてクソなものは使うなよってことなのかね
0180デフォルトの名無しさん2015/09/10(木) 20:18:56.37ID:dU3rTPO3
>shared_array
いえそんなものありません
0181デフォルトの名無しさん2015/09/10(木) 20:26:28.15ID:2c1W3PII
shared_ptr<array<int,3>>で
0182デフォルトの名無しさん2015/09/10(木) 20:42:53.70ID:XPHYFe1B
unique_ptr<T[]>は知的興味でしかないだろうな
なぜなならアーレイやベクトルやストリングがあるからさ
そんな僕でもこれらデータ構造よりもunique_ptr<T[]>が使えると思いつく場面はあるんだ
それはヒープ配列の生のポインターをAPIで所有権をうけとるときたった一つさ
0183デフォルトの名無しさん2015/09/10(木) 23:41:24.04ID:Lt3YsJ/Z
> アーレイ
和服の彼女かとおもた
0184デフォルトの名無しさん2015/09/11(金) 10:32:13.74ID:yGFUVtFx
そういえばshare_ptrの参照カウンタって
実際の情報はどこで保持されてるんでしょうか?
0185デフォルトの名無しさん2015/09/11(金) 10:33:39.57ID:H6P2Jlk5
ソース見ればいい
0186デフォルトの名無しさん2015/09/11(金) 11:22:30.30ID:Ra3TP7iE
ソースみれば分かるが動的に確保しているよ
ただし高速化の工夫はしてある
0187デフォルトの名無しさん2015/09/11(金) 14:11:15.39ID:yGFUVtFx
share_ptrのソース見ましたが、atomic型を使って
うまいことやってるというくらいしか分かりませんでした

atomicについて知らなかったので調べたんですが、
これってC++11のメモリモデルに関するもので、
いわば言語のコアの機能なんですね
0188デフォルトの名無しさん2015/09/11(金) 14:12:30.08ID:yGFUVtFx
つまりC++11以前やCではこのshare_ptrを直接実装する方法はなく、
たとえば参照カウンタを持つクラスを用意し、これをshare_ptrさせたい
クラスに継承させるという間接的な方法しかないということですよね?
0189デフォルトの名無しさん2015/09/11(金) 14:20:50.61ID:ZeO2NzYz
んなわけねーだろ
0190デフォルトの名無しさん2015/09/11(金) 15:00:10.29ID:xy/6VGnh
C++11で、型推論autoを使って楽をしようと思ったんだが、
2つの変数の型を自動的に整合させる方法が分からないのだ。

void some_job() {
const auto loop_times = 10;

for (auto cnt = 0; cnt != loop_times; ++cnt) {
/* ループ内の処理 */
}
} // (インデントはおそらく破壊される)

上の場合、ループ回数 loop_times と、ループカウンタ cnt は
どちらのautoもintと判断されるのでとりあえず一致する。
しかし auto loop_times の初期値にintでない値を与えると
当然ながら loop_times と cnt の型が違ってしまう。

「cntの型は、loop_timesの型からconstを外したものだよ」
という変数宣言の書き方はないだろうか?

諸兄らの教えを乞いたい。
0191デフォルトの名無しさん2015/09/11(金) 15:18:09.86ID:yGFUVtFx
>>189
どのへんが間違ってるんですか?
C++初心者にもわかる説明だとありがたいです
0192デフォルトの名無しさん2015/09/11(金) 15:43:03.84ID:BdWqvAgc
>>190
ttp://ideone.com/CTjWaa
これでどうよ

>>191
boost::shared_ptrのソースでも見てみれば
shared_ptrが標準に入ったのは11からだけどそれ以前にもshared_ptrはあったんだから
01931902015/09/11(金) 18:00:12.76ID:xy/6VGnh
>>192
まさに希望した通りの情報です。感謝します。
std::remove_const 云々 と書くのか。

sizeof() と typeid().name() とで並べて見たところ
loop_times と cnt の型は一致した。
loop_times = 10U; や loop_times = '3'; でも
試したら自動的に型が合った。


テンプレート構造体に閉じ込めたtypedefか。
こんな仕掛けを思いつくとは尊敬すべき変態さん達だな。
0194デフォルトの名無しさん2015/09/11(金) 19:32:57.26ID:eMWeHauN
これって
const auto && loop_times = 10;
でも動くんか?
そこはdecayじゃないのかって思ったんだけど
0195デフォルトの名無しさん2015/09/11(金) 21:03:06.98ID:yGFUVtFx
>>192
よく見てみたら、参照カウンタ自体の仕組みはごく単純で、自分のイメージ通りでした
というか、そもそも自分がshare_ptrの使い方をちゃんと理解していませんでした
share_ptrに生ポインタ渡せるのは初回だけなんですね・・・
http://ideone.com/mysMec

スレ汚し失礼しました
0196デフォルトの名無しさん2015/09/11(金) 23:54:45.84ID:b8iFLD3f
コーディング言語は「オープンソース」が制す:Github人気調査結果 ≪ WIRED.jp
http://wired.jp/2015/09/11/github-coding-languages-open-source/
http://wired.jp/wp-content/uploads/2015/09/wiredus09101024x541.jpg
0197デフォルトの名無しさん2015/09/12(土) 01:27:55.77ID:JUZlHW5G
Rubyがそんなに上位だと思えないけどなぁ
0198デフォルトの名無しさん2015/09/12(土) 02:10:12.94ID:xJrAsa7q
ま、どうせcssとか入ってくる調査だし

でも混ぜこぜでもcssに負けてんのはちょっと面白い
0199デフォルトの名無しさん2015/09/12(土) 04:58:03.64ID:oXtx5tH/
HTMLとJavaScriptとCSSのみっつが順位を競う
プログラミング言語ランキングとは
サイトの名前をwiredからweirdに変えた方がいい
0200デフォルトの名無しさん2015/09/12(土) 13:10:32.88ID:JUZlHW5G
だよねぇ。おかしいよねぇ。
なんだかんだCは上位にいると思う。
0201デフォルトの名無しさん2015/09/12(土) 13:17:01.58ID:VGFicEEt
9位は十分上位だろう
githubはもともとスクリプト書いてる人が多く使ってたから
ああいう順位なんだと思うよ
0202デフォルトの名無しさん2015/09/12(土) 14:01:59.69ID:kwHtj/5N
マルチスレッドとグローバル変数の寿命に関する質問なのですが
detachしたスレッドが,メインスレッド終了後も生き続けてもグローバル変数にアクセスしても問題はありませんか?
StackOverflowなどには大丈夫だという回答があり、簡単なテストコードでも問題は無かったのですが
クラス内static変数にアクセスしたときに時々異常終了したことがあったので少し不安です
0203デフォルトの名無しさん2015/09/12(土) 14:06:47.33ID:JUZlHW5G
便乗質問 メインスレッドを終了してもコスレッドは生きてるんでしたけ? まずそこから・・・
0204デフォルトの名無しさん2015/09/12(土) 14:06:59.24ID:5QpLz49+
問題あるだろ
0205デフォルトの名無しさん2015/09/12(土) 14:37:23.35ID:kwHtj/5N
>>203
生きてないですね(核爆
0206デフォルトの名無しさん2015/09/12(土) 15:31:31.26ID:Jf5oAWRg
コンストラクタ() = delete;
これってなんですか
0207デフォルトの名無しさん2015/09/12(土) 15:52:40.95ID:uQU/vJQH
cppreference.comでは以下のように説明されている
>Inhibiting the automatic generation of a default constructor by the compiler.
0208デフォルトの名無しさん2015/09/12(土) 16:38:30.48ID:Jf5oAWRg
コンストラクタを書かないのとどう違うのですか?
0209デフォルトの名無しさん2015/09/12(土) 16:40:31.69ID:pEVoCQGH
書かないと自動生成されるだろ
0210デフォルトの名無しさん2015/09/12(土) 16:41:18.68ID:9veCOfSe
コンストラクタ書かなきゃいけなくなる
0211デフォルトの名無しさん2015/09/12(土) 16:41:52.46ID:9veCOfSe
デフォルト以外の
0212デフォルトの名無しさん2015/09/12(土) 16:43:08.92ID:Hpj3Z5wB
ビッグ4の法則はコンストラクターには成り立たないからな
0213デフォルトの名無しさん2015/09/12(土) 18:04:37.15ID:fhFqy1Q7
見たとおりコンストラクターが定義される
ただし使うとコンパイルエラーになる特別な本体で

定義されるので書かなかったときの自動生成は行われないし
privateで書いて生成禁止にしてもfriendからアクセス出来てしまうという誤りを防げる
0214デフォルトの名無しさん2015/09/12(土) 21:36:31.32ID:XAqQ9sMD
素直に単純に

コンパイラのコンストラクタの自動生成を阻止する

とせずに

使えない特殊なコンストラクタを定義
↓
コンストラクタがあるので自動生成されない

という回りくどいプロセスを踏んでいるのは何故ですか?
0215デフォルトの名無しさん2015/09/12(土) 21:46:02.85ID:mqPDPmPF
>>214
どっちが回りくどいかもう一度考えてみたら?
0216デフォルトの名無しさん2015/09/12(土) 21:48:41.33ID:urgaTojg
>>213の二段落目二行目のためでは
0217デフォルトの名無しさん2015/09/12(土) 22:39:51.40ID:fhFqy1Q7
>>214
そりゃ>>207のサイトが嘘つきなだけで
自動生成を抑止するためじゃなく
使えない関数を定義することが目的だからね
http://ideone.com/LKN3q1
0218デフォルトの名無しさん2015/09/13(日) 01:24:33.20ID:T9Cd4+Hx
目的は書く人次第だが
0219デフォルトの名無しさん2015/09/13(日) 01:28:55.66ID:Auzbsz6v
つまり>>207も>>217も目的を決めつけた嘘つきってことですね
0220デフォルトの名無しさん2015/09/13(日) 02:17:23.86ID:T9Cd4+Hx
どうでもいい
0221デフォルトの名無しさん2015/09/13(日) 03:41:04.36ID:6aqKmbgS
使えない関数を定義しているのではなく、そのシグネチャの関数がdeletedであることを宣言しているのだろう。

適用されるのは同じ翻訳単位だけなのでは?
0222デフォルトの名無しさん2015/09/13(日) 04:33:23.08ID:fzKWBIn4
>>221
そのレスする意味ある?
0223デフォルトの名無しさん2015/09/13(日) 05:08:08.47ID:6aqKmbgS
>>213みたいな無駄にややこしい上に誤った説明をそのままにしておくのは無責任なのでは?
0224デフォルトの名無しさん2015/09/13(日) 05:42:13.47ID:fzKWBIn4
そうじゃなくて、そのレス何も説明してないでしょ
他人を批判する前に自分を省みろって
0225デフォルトの名無しさん2015/09/13(日) 06:21:11.66ID:oxWskyTT
>>221
deleteが同じ翻訳しか適用されなくても
delete関数はインライン関数だから
違う翻訳単位でdeleteじゃかったらODR違反
問題ない
0226デフォルトの名無しさん2015/09/13(日) 08:36:35.77ID:GRWOhyHT
std::queue<T>についてなんですが
clear()メソッドが無いのは何か理由有り?

一応pop()がデータを返さなくてfront()で先頭要素にアクセスしてからpop()すべき仕様なのは
極力先頭要素のコピーをしたくなくて、参照で済ませたいからだと推測できるのですが
clear()が無い理由はちょっと…
0227デフォルトの名無しさん2015/09/13(日) 08:40:43.87ID:1aU/2qC8
>>226
データ構造上、コンテナを使い回すメリットがないから
新たにインスタンス作ればよろしいということ
0228デフォルトの名無しさん2015/09/13(日) 08:43:14.92ID:m2o7J/Xt
>>226
まーたその話かよ
コンテナアダプタだからって結論が出ただろ
0229デフォルトの名無しさん2015/09/13(日) 13:19:52.29ID:BGQqu8BA
clearが欲しいなら黙ってstd::dequeを使えばいいだけ
FIFOを使う場合にclearが必要になるのがおかしい
0230デフォルトの名無しさん2015/09/13(日) 13:59:21.40ID:21SWVEBe
>FIFOを使う場合にclearが必要になるのがおかしい

へー、どうして?
FIFOを乱す順序の操作ではないよね?
0231デフォルトの名無しさん2015/09/13(日) 15:45:14.55ID:zCQU/fdL
>>226
clearしたければclearする派生クラスを作ればいい
そういう設計だ
0232デフォルトの名無しさん2015/09/13(日) 17:42:34.20ID:aPjNmwB2
>>226
>極力先頭要素のコピーをしたくなくて

pop()が要素を返す場合コピーコンストラクタが例外を投げる可能性があるので
例外安全を満たすことができなくなる。
0233デフォルトの名無しさん2015/09/13(日) 17:59:22.43ID:dMwVjMJU
>例外安全を満たすことができなくなる

へー、どうして?
0234デフォルトの名無しさん2015/09/13(日) 18:45:49.56ID:ABWGqgkn
popでデータを返さないのはコピー時に例外発生したときにコンテナの中身から取り除かれるわpopした中身受け取れないわになるのを防ぐためってのもある
あとtopで参照返すことによりswapなどを使う事により例外発生させることなく受け取ることが可能になる
C++11からmove出来るようになったからほぼいらなくなったけど
0235デフォルトの名無しさん2015/09/13(日) 20:20:56.97ID:M0wiS1Aa
平面を二次元配列で表す時
array[width][height]
array[height][width]
どっちがいいですか?
0236デフォルトの名無しさん2015/09/13(日) 20:22:35.56ID:G58MCBrj
>>236
そんなことはお前のやろうとしていること次第。
ここできくことじゃない。
0237片山博文MZ ◆T6xkBnTXz7B0 2015/09/13(日) 20:25:57.90ID:io0Trfl5
>>235
横向きに連続してアクセスするなら
array[height][width]
がいい。まあ、その辺はインライン関数で抽象化して、実測すればわかる。
0238デフォルトの名無しさん2015/09/13(日) 21:21:42.16ID:M3GBYhkY
速度の差異を知りたいって事か。
変わるんすかねぇ
0239デフォルトの名無しさん2015/09/13(日) 22:47:56.80ID:q3JnkdTU
何故かわらないと思うんですか?
0240デフォルトの名無しさん2015/09/13(日) 23:01:44.40ID:JxlRVXLx
無礼な奴だな
まず変わると考える根拠を述べよ
0241デフォルトの名無しさん2015/09/13(日) 23:26:04.26ID:q3JnkdTU
変わらないと思う理由が知りたかっただけです
ここ、C++スレですよね
0242片山博文MZ ◆T6xkBnTXz7B0 2015/09/13(日) 23:55:37.85ID:io0Trfl5
array[height]は、width個の横に連続したデータになるから、
横方向に連続したアクセスなら、早くなるはず。
先読みとかキャッシュも関係するかも。
0243デフォルトの名無しさん2015/09/13(日) 23:57:05.44ID:ABWGqgkn
アクセス方法次第でCPUのキャッシュミスの発生率も変わるから速度も変わる
0244デフォルトの名無しさん2015/09/14(月) 01:17:12.52ID:h9CenDqd
>>235
プログラムが完成したら入れ替えてテストしろよ
0245デフォルトの名無しさん2015/09/14(月) 02:27:47.71ID:WQ7njzDq
なぜcolumn majorにしなかったのか
0246デフォルトの名無しさん2015/09/14(月) 19:17:30.03ID:nW8KHDe7
質問です
template templateという機能がありますが、これをクラステンプレートではなくて
関数テンプレートを渡す機能はありますか?

http://codepad.org/pYejO9Fn

意図としては、ライブラリを作るにあたって、ユーザーからコールバックとして
関数テンプレートを受け取りたいです。
コードの最初のFooクラスのように、クラスで包んでoperator()を定義すれば
実現できます。しかし不格好なので、 bar のように普通に定義された関数テンプレートを
渡すことはできないでしょうか?
0247デフォルトの名無しさん2015/09/14(月) 19:24:44.32ID:cuv2HbJp
>>246
関数テンプレートを渡す機能はありません
0248デフォルトの名無しさん2015/09/14(月) 19:29:09.13ID:nW8KHDe7
>>247
そうか。あざす。残念。
02491902015/09/15(火) 08:28:18.63ID:j+WGnnSb
>>194 の内容が >>190, >>193 と関連していることに気づかず失礼した。

const auto loop_times = ... に対しては
for (std::remove_const<decltype(loop_times)>::type cnt = 0; ...
for (std::decay<decltype(loop_times)>::type cnt = 0; ...
どちらで書いても期待通り動作することを確認。

const auto && loop_times = ... に対しては
前者(remove_const)はコンパイルエラー、後者(decay)は動作する。


ところで const auto && loop_times という変数宣言の && の
意味が分からないのですよ。
この&&が変数にどんな性質を与えるのか、
検索時に使うべきキーワードなど教えていただきたい。
0250デフォルトの名無しさん2015/09/15(火) 08:37:09.59ID:kADVoeCZ
rvalue reference declaratorで検索とかどうよ
0251デフォルトの名無しさん2015/09/15(火) 14:25:08.30ID:B7TuBbRI
endで取得したイテレータをデクリメントして
最後の要素を得るのは仕様的に問題無いでしょうか?
http://ideone.com/dzDqLI
0252デフォルトの名無しさん2015/09/15(火) 19:45:47.95ID:AnTXPfgv
プログラム内で生成した連番画像データを、
動画の形式(H.264など)に圧縮して、
ネットワークに送出し、
タブレットなどの端末でストリーミング再生できるようにしたいのですが、
どのようにすればできるでしょうか?

動画の形式にするにはMediaFoundationやNVENCなどのHWエンコーダを利用する
プログラムで可能であることは分かりました。
ネットワーク経由でストリーミングする具体的な方法が分かりません。

扱えるAPIは

・WinAPI
・WinSock
・Direct3D11
・DirectShow
・MediaFoundation

などです。

よろしくお願いします。
0253デフォルトの名無しさん2015/09/15(火) 19:48:50.92ID:8YL7tngp
>>251
最後の要素が存在するならOK
0254デフォルトの名無しさん2015/09/15(火) 20:38:35.34ID:j2Iw9RkO
素人丸出しの質問で申し訳ありません

static const int で定義した変数を、switch-case文のラベルに使うことって可能なんでしょうか。C++的に。

なんかダメな感じはするけど、昔使ったコンパイラでは通ったような記憶もあって混乱中。
0255デフォルトの名無しさん2015/09/15(火) 20:46:51.23ID:Or0Sr6DS
やってみりゃわかるけど、ラベルに変数使えましたけ? ???
0256デフォルトの名無しさん2015/09/15(火) 21:25:23.69ID:levHHN+I
static const intなら大丈夫
0257デフォルトの名無しさん2015/09/15(火) 21:31:16.73ID:zI3JQASJ
staticは関係なくね
0258デフォルトの名無しさん2015/09/15(火) 21:31:38.97ID:Or0Sr6DS
ん enum も使えたようなw
0259デフォルトの名無しさん2015/09/15(火) 21:36:13.99ID:levHHN+I
const int n = a;
とか定数以外を束縛できちゃうのでダメ
0260デフォルトの名無しさん2015/09/15(火) 21:44:32.92ID:IZgZ7hQz
関数の外でconst int n = (定数);としたなら逝ける
0261デフォルトの名無しさん2015/09/15(火) 21:57:48.20ID:HX9x+LxP
static constをconstexprに変えてコンパイルが通るならcaseにも使える
0262デフォルトの名無しさん2015/09/15(火) 22:09:03.95ID:Z2SQdZ/1
>>255
おまえはやってみたのかよw
0263デフォルトの名無しさん2015/09/15(火) 22:24:06.82ID:ucrFrhcB
>>251
つrbegin
0264デフォルトの名無しさん2015/09/15(火) 22:36:25.02ID:WfYHRfSY
>>251
問題ないけど、back()やpop_back()を使う方が適切な場合が多いよ。
0265デフォルトの名無しさん 転載ダメ©2ch.net2015/09/16(水) 19:23:22.85ID:3SPxKhTi
c#なら参照も
aaa.bb();で間はドットだけだから1クリックでいいけど->は三回もクリックしないといけないから面倒
0266デフォルトの名無しさん2015/09/16(水) 19:31:14.76ID:OezDmTKu
>>265
クリックじゃなくてプレスかタップ
0267デフォルトの名無しさん2015/09/16(水) 19:45:37.70ID:FdNN8V0s
C++も参照は.だろ
0268デフォルトの名無しさん2015/09/16(水) 19:49:28.49ID:P6BY/gAm
参照は.だけれど参照の実態はポインターだから
アクセスが遅い
0269デフォルトの名無しさん2015/09/16(水) 19:59:21.74ID:a5qJ/F/3
流れが見えないレスですね
アクセス速度の話してましたっけ
0270デフォルトの名無しさん2015/09/16(水) 20:57:52.20ID:+CviF6rc
キーボードならタイプかストロークかヒットじゃないのか
ボタンウィジェットの話?
0271デフォルトの名無しさん2015/09/16(水) 23:22:43.19ID:/GUNKgZc
クリックは、一般英語としては「カチッと押す」くらいの意味でしか無いらしいし
そちらの意味でなら実は何ら問題ないという可能性も?
0272デフォルトの名無しさん2015/09/17(木) 20:44:50.17ID:vEWjEaDX
そもそも突っかかる部分がどうでもよすぎてちょっと
0273デフォルトの名無しさん2015/09/17(木) 21:00:22.78ID:kJeXGTkh
アスペは定義にこだわるんだよ
社会不適合者が唯一相手を言い負かすことのできる領域だからね
0274デフォルトの名無しさん2015/09/17(木) 21:11:41.17ID:Qtg7/zjM
click == ポチる
0275デフォルトの名無しさん2015/09/17(木) 21:14:01.08ID:/7qLf8rs
ソフトウェアキーボードとマウスでしょ(適当)
0276デフォルトの名無しさん2015/09/18(金) 01:45:36.53ID:TWvmhBF9
>>273
なんでそうすぐ荒らそうとするんだお前は
0277デフォルトの名無しさん2015/09/18(金) 02:16:02.58ID:ziYbj+Cy
規格書全然読めてないわ
0278デフォルトの名無しさん2015/09/18(金) 09:07:58.49ID:4JhMPdKG
アスペとは何かがまるで解ってないようだな
0279デフォルトの名無しさん2015/09/18(金) 11:51:31.83ID:5wBzpDO5
stlのiteratorであることを調べる方法はありますか?
iterator_treitsで型が定義されているかどうかを
調べられるかということです
0280デフォルトの名無しさん2015/09/18(金) 11:59:04.47ID:4JhMPdKG
>>279
ない(断言)。
なぜならN3797にSTLなる文言が一度たりとも出てこない。
そのような分類が存在しないということだ。

「型識別子が宣言されているか否か」は正直ときどき欲しいことがあるが、
これはC++の文法上できない。
仮にis_declarated<foo>::valueのようなトレイツを作ろうにも、
fooがクラスなのかオブジェクトなのかにより構文規則が変動してしまい、
このためパースできない。
0281デフォルトの名無しさん2015/09/18(金) 12:48:17.69ID:vvw8eaFK
opencvのcv::matが分からん。画像処理とかムリポ。
0282デフォルトの名無しさん2015/09/18(金) 17:58:07.46ID:5wBzpDO5
#include <iostream>
using namespace std;
template<typename T>
struct A{
using type =int;
};
template <typename T>
auto f(typename A<T>::type& a){
return a;
}


int main() {
typename A<int>::type x;
cout<<f(x)<<endl;
// your code goes here
return 0;
}
どうやってマッチするようにできますか
>>280
ありがとうございます
0283デフォルトの名無しさん2015/09/18(金) 18:27:30.80ID:5wBzpDO5
#include <iostream>
using namespace std;
#include <iostream>
using namespace std;

template<typename T>
struct A{
struct B{};
using type =B;
};
template <typename T>
auto f(typename A<T>::type& a){
return a;
}

int main() {
typename A<int>::B x;
f<typename A<int>::B>(x);
// your code goes here
return 0;
}
ソースコードを間違えました。
こちらでお願いします。 👀
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)
0284デフォルトの名無しさん2015/09/18(金) 18:37:33.56ID:5wBzpDO5
すみません
ソースコードをまた間違えました
これが最後です
#include <iostream>
using namespace std;
#include <iostream>
using namespace std;

template<typename T>
struct A{
struct B{};

};
template <typename T>
auto f(typename A<T>::B a){
return a;
}

int main() {
typename A<int>::B x;
f<typename A<int>::B>(x);
// your code goes here
return 0;
}
0285デフォルトの名無しさん2015/09/18(金) 19:41:08.07ID:5wBzpDO5
これが最後の最後です。
コードを短くしてわかりやすくしてみました
#include<vector>
using namespace std;
template <typename T> auto f(typename vector<T>::iterator t){};
int main() {
std::vector<int> a;
f<typename vector<int>::iterator>(a.begin());
return 0;
}
0286デフォルトの名無しさん2015/09/18(金) 20:07:17.89ID:5egfmsiH
ideone に貼っとくれ
0287デフォルトの名無しさん2015/09/18(金) 20:44:44.53ID:5wBzpDO5
http://ideone.com/iKRfDL
自己解決しました
ありがとうございました
0288デフォルトの名無しさん2015/09/18(金) 23:40:50.48ID:ctwqb5Ko
何をしたいのか全くわからんのだが
0289デフォルトの名無しさん2015/09/19(土) 00:49:03.07ID:yY3lA1m6
>>280
>C++の文法上できない

ほんとか?
すぐ出来そうな気がするんだけど
http://ideone.com/IuwOg1
0290デフォルトの名無しさん2015/09/19(土) 03:17:45.05ID:8Pb114IF
>>289
ちょっと言ってることと違う
using foo = int;
int main() {
cout << is_declared<foo>::value; //1
cout << is_declared<bar>::value; //0
}
これはできるのか?
0291デフォルトの名無しさん2015/09/19(土) 05:09:41.19ID:O1tI28gd
>>290
それできて何の意味があるの?
0292デフォルトの名無しさん2015/09/19(土) 05:35:18.13ID:YQpUAMED
STLなんて言葉は無い厨の馬鹿さが証明されてしまったな
0293デフォルトの名無しさん2015/09/19(土) 08:22:51.87ID:e8fiNzCd
STLはあれだが、iterator_treitsはねーわ
どうやったら、こう、間違えるんだよ
0294デフォルトの名無しさん2015/09/19(土) 12:03:44.27ID:q2VPyPCF
Visual C++の超拡張機能ならSFINAEでnon-dependent typeもdependent type扱いだぜ
0295デフォルトの名無しさん2015/09/21(月) 16:46:44.70ID:JTlp29uf
ここに書いてあることって今見るとどうですか?もう8年前の記事ですが
http://espresso3389.hatenablog.com/entry/20070204/1170538374
自分は速度欲しいところはC++、GUIとかはC#、両者をつなぐときはP/Invokeなり
C++/CLIを挟むなりとしてきましたが、全部C#で閉じないものかと思うことはあります
0296デフォルトの名無しさん2015/09/21(月) 17:15:28.41ID:XzxcjOEi
思うに、ポインタが危険と熱く語っているけど、C#にも参照が有るし、
ポインタ演算が出来ない点を除いては、ほぼポインタが有るのと同じ状況じゃね?
参照がnullだとヌルポするんでしょ?危険度は一緒では?
彼はC#に色々期待していたようだけど、今思えば結局VBの置き換えが目的だったんだなって納得できる
0297デフォルトの名無しさん2015/09/21(月) 17:17:30.30ID:8N0qbHVY
windowsのステマを本気にするバカはいないだろ
0298デフォルトの名無しさん2015/09/21(月) 18:41:13.82ID:IJWaFyNv
>>296
> 参照がnullだとヌルポするんでしょ?危険度は一緒では?

典型的な C# 脳だな w
危険なのは書き込みの方だよ
0299デフォルトの名無しさん2015/09/21(月) 18:42:53.29ID:0lL32CsL
delegateはstd::functionで代用出来るしマルチキャストデリゲートはBoostにsignal2ってのがある。これは8年以上前からある
GCもshared_ptr unique_ptrで大抵の用途に事足りる
C#はGCのせいでデストラクタが使い物にならないし、そのせいでusingを書かないと解りづらいリソースリークの元になる。どっちが優れてるとは思わない一長一短

他はこの人の言う未来が早く来るといいですねー
が8年たった今でも変わらない感想

>>296
バッファーオーバーフローが予測できない結果をうむのに比べたら安全。だからこそvalgrindなどのメモリチェックツールがある。事実は事実として認めないとね
0300デフォルトの名無しさん2015/09/21(月) 18:50:48.72ID:XzxcjOEi
なるほど、ポインタはmemcpyが怖いって言う認識ですか
0301デフォルトの名無しさん2015/09/21(月) 19:09:45.69ID:4SVIoSBj
ダングリングポインタのこと言ってんじゃね
0302デフォルトの名無しさん2015/09/21(月) 19:47:50.10ID:IzwQBNZR
物理メモリが見えないから、原理的に無限のメモリを使えるキリッ
とか書いてあるんだけどさ、、、

前々から疑問なんだけど、C/C++ってデフォで関数が動的(staticでない)なんだけど、
あれって何で?メリット無いよね?
教えてエロい人。

C#やJavaはランタイムがある前提だから、実行時に動的関数のアドレスを再利用することも出来る。(やろうと思えば)
だから、確かに原理上はどんな大きなプログラムでも、一時的に使用するメモリが十分小さければ実行できる。
結果、C#やJavaには動的関数にするメリットがある。

でもC++ってないよね?
あれって分割コンパイルを円滑に行うための方便?
別にstaticである必要もないんだけどさ。
0303デフォルトの名無しさん2015/09/21(月) 20:02:23.73ID:qBJEaPVd
>>302
>C/C++ってデフォで関数が動的(staticでない)なんだけど
よくわからない,もう少し説明がほしい
メンバ関数は「デフォ」でstatic じゃないインスタンスメソッドだがそれはC#/Javaと同じ
C#/Java はクラスに属しない関数は存在しえないが,C/C++ はクラスと結びつかない関数はありえる,ということはあるね

ランタイムの存在とインスタンスメソッド/クラスメソッドの有無とに何の関係も見出せないが?
0304デフォルトの名無しさん2015/09/21(月) 20:02:28.82ID:0lL32CsL
>>302
何言ってるか解らないんだけど
関数のアドレスが枯渇するプログラム?何それ?
0305デフォルトの名無しさん2015/09/21(月) 20:06:20.03ID:4SVIoSBj
関数が動的ってどういう意味なんだろう
ぐぐったらこんなのが出てきたけど
ttp://www5b.biglobe.ne.jp/~suugaku/vc++kougi/ckougi/dai8koudai3wa.html
関数それ自体が消滅するわけじゃないよね
0306デフォルトの名無しさん2015/09/21(月) 20:08:30.59ID:0lL32CsL
>>302
前々から疑問に思ってるんならそのままにせずにちゃんと調べた方がいいよ

あんたの書いてる事読むと基礎を全く理解しないまま放置して自分の中でこういうものと思いこんでる物が育ってる感じしかしないよ
0307デフォルトの名無しさん2015/09/21(月) 20:08:47.78ID:QVf3KibQ
>>302
メモリ管理はOSの仕事だろう
0308デフォルトの名無しさん2015/09/21(月) 20:11:04.82ID:XzxcjOEi
単にstaticといわれても
メンバ関数と普通の関数では意味が変わるし
それを加味しても言ってる意味が良く分からないんだが

それともライブラリの静的/動的リンクの話か?
それなら実行ファイルのサイズ削減と実行時のメモリ節約だ
同じライブラリを複数のプロセスから動的ロードすると
ライブラリのメモリ上での実態がプロセス間で共有される
0309デフォルトの名無しさん2015/09/21(月) 20:16:03.88ID:qBJEaPVd
DLLはあまり成功しているようにみえないが‥
0310デフォルトの名無しさん2015/09/21(月) 20:17:39.45ID:QVf3KibQ
>>305
仮に動的生成をしてるとしたら、
f()を直接呼ぶ場合と、
何かの関数を呼び、その中から呼んだ場合で
アドレスが変わると言うこと何だろうけど、本当?
0311デフォルトの名無しさん2015/09/21(月) 20:21:39.99ID:XzxcjOEi
>>309
成功も失敗も・・・
OSのAPIはDLLにするしかないだろ
そうしないとアプリにOSそのものを静的リンクしなければならなくなるだろ、ありえん
DLLは絶対必要な仕組み
0312デフォルトの名無しさん2015/09/21(月) 20:26:20.93ID:XzxcjOEi
>>310
>>305のページは殆ど無茶苦茶で頭痛くなるので君のような初心者は読まないほうが良い
有る程度分かった人がニヤニヤしながら読む以外に存在価値のないページ
関数のコードが動的に生成されたりはしない
スタックフレームが動的に生成されるだけ
0313デフォルトの名無しさん2015/09/21(月) 20:27:30.64ID:4SVIoSBj
>>310
ttp://www5b.biglobe.ne.jp/~suugaku/vc++kougi/ckougi/dai8koudai3wa.html
関数にstaticつけるとメモリに駐留するとか適当なこと言ってて
単に知識がないか間違って覚えてるっぽい
0314デフォルトの名無しさん2015/09/21(月) 20:34:16.96ID:0lL32CsL
>>305
>>310
リンク先読んで吹いた
やべぇなこれ。思い込みでここまで書けるのもすごいが、こんなの公開して誤った知識を持つ奴が増えるのも恐ろしい。
C言語界におけるテロ行為や〜

>※ プログラミングの学習において、完全に理解してから次に進むという完全主義は、学習を妨げることになります。基本は、意図したとおりコンピュータが動けばよいです。

とかかいてるけど理解しないのと誤った理解をするのは別だよな…

去年までページ更新してるみたいだし連絡したら削除してもらえんかなぁこれ少なくともC言語に関わるところ全て
0315デフォルトの名無しさん2015/09/21(月) 20:34:19.78ID:f8ZVmSR1
>>305>>314
ワロタwww
これ絶対にわざと間違えて書いてるだろうww
0316デフォルトの名無しさん2015/09/21(月) 20:42:48.62ID:az+bvJoo
なんかよくわからなくなってきたんだが、自由関数のアドレスっていつ決定されるの??
プログラムのロード時?だとすると、なぜ関数ポインタをテンプレートに渡せるの?
テンプレートがインスタンス化された時に相対的なアドレスが決定されるからという理解でいいのかな??
0317デフォルトの名無しさん2015/09/21(月) 20:58:13.63ID:0lL32CsL
>>316
関数のアドレスはリンク時に決定する

テンプレートに関数を渡せるのはマクロと一緒でテンプレートを実体化したコード内に関数名そのまま埋め込まれるから
0318デフォルトの名無しさん2015/09/21(月) 21:25:16.23ID:/zbs+z1X
>>313
ヤベー、コーラ吹いたわ

変数の知識から、頑張って類推で理解しようとしているのか
もしくはファンクタとごっちゃになってるのか
0319デフォルトの名無しさん2015/09/21(月) 21:30:27.57ID:K/qYM/td
そこはファンタ吹いとけよ
0320デフォルトの名無しさん2015/09/21(月) 21:31:25.34ID:XzxcjOEi
その人類推するのは大好きみたいで掛け算についても色々類推して
リボン計算とやらを発見したらしんだが、
どうみても普通の筆算の書き方を変えただけなんだが
http://www5b.biglobe.ne.jp/~suugaku/neko/dai1koudai6wa.html
0321デフォルトの名無しさん2015/09/21(月) 21:37:25.15ID:IzwQBNZR
>>305のリンクが話題になっているが、
実は俺もそのリンクにしかたどり着けず、長年の疑問を解消できていない。
そのリンク先での内容はスタックの存在を考えていないことが間違いだ。(static変数とstatic関数を混同している)
多分、C言語は仕様にスタックの存在が仮定されていると思う。

ただ、関数自体はそのように動的に生成され、消滅しても良いことに仕様としてはなっている。
(と断言できるほど明確に記述はされていないが)
ただこの場合関数ポインタが使えなくなるため、通常のC/C++では実際には生成/消滅はしない。
結果的にC/C++の場合の静的関数(static void hoge()等)と動的関数(void hoge()等)に大差はない。
だからこそ、静的関数のメリットが分からない。

C++の場合、templateは静的に展開される。
つまり、必要なものを全てコンパイル時に生成し、実行体に埋め込む。
templateは使った分だけきっちりexeが膨らむ。
従って、template等を使い尽くした場合、場合によってはアドレス空間が枯渇する。
(ただし parametar pack の場合だけ別扱いかもしれないが。)
http://en.cppreference.com/w/cpp/language/parameter_pack

>>310
C++/CLIでは関数は動的に配置される。
そのクラスが使用される時にメンバ関数がメモリ上に配置され、不要になれば回収される。
従って原理的には32bitマシンでも4GB以上のexeを動作させられる。(C#も多分同じ)
クラス外部から関数のアドレスを参照する場合は static である必要がある。
これは実行時に仮想関数等のアドレステーブルに配置できることを保証するため。
つまり、staticを付けるかどうかは明確に違いがある。

分かりやすくいえば、

・4GB以上のexeを32bitマシンで実行できるか?(データではなく、命令部分だけで4GB以上)

となる。C++/CLI、C#は出来る。Javaも多分出来る。
C/C++は多分できない。(動的関数ならできる)
0322デフォルトの名無しさん2015/09/21(月) 21:40:23.93ID:QaJZDGlp
そのページの人はがんばって考察してるのは好感が持てる
0323デフォルトの名無しさん2015/09/21(月) 21:46:12.22ID:XzxcjOEi
>>321
>結果的にC/C++の場合の静的関数(static void hoge()等)と動的関数(void hoge()等)に大差はない。
>だからこそ、静的関数のメリットが分からない。

つまらない事を長年悩んだり、長文書き込む前に
まず基本的なCの文法を学習しては?
static void hoge()のメリットなんか初心者でも知ってる事
たぶんC言語の初心者用のサイトでも載ってる筈
0324デフォルトの名無しさん2015/09/21(月) 21:46:34.32ID:4SVIoSBj
>>321
関数にstaticを付けた場合その関数は内部リンケージになるってだけだぞ
一体どっから動的関数やら静的関数やらが出てくるんだ…
0325片山博文MZ ◆T6xkBnTXz7B0 2015/09/21(月) 21:53:27.69ID:3iy+9eBG
typedef void (*FN)(void);
void *p = malloc(...);
memcpy(p, ...);
FN fn = (FN)p;
(*fn)();
free(p);
「動的関数」ってこんな感じ?
0326デフォルトの名無しさん2015/09/21(月) 21:59:22.27ID:XzxcjOEi
はーそんな例とか
むしろ
proc = GetProcAddress(
の方が一般的だろうに
普段散々使っておいて
残念な人だ
0327デフォルトの名無しさん2015/09/21(月) 22:09:21.94ID:/rzmNe57
mallocの領域を実行したらメモリ保護で落ちるだろ
20年前からワープしてきたのか
0328デフォルトの名無しさん2015/09/21(月) 22:09:54.13ID:rFlrDRn6
型を変数として扱うことってできない?
型を格納する型 Typetype だとしたら
Typetype ttype1 = 引数の型をハッシュ化する関数(var);
if (ttype1 == ttype2) {}
みたいに
0329デフォルトの名無しさん2015/09/21(月) 22:11:28.95ID:rFlrDRn6
ただsizeofってのはなしで
0330デフォルトの名無しさん2015/09/21(月) 22:12:05.09ID:0lL32CsL
>>321
> ・4GB以上のexeを32bitマシンで実行できるか?(データではなく、命令部分だけで4GB以上)
>
> となる。C++/CLI、C#は出来る。Javaも多分出来る。
> C/C++は多分できない。(動的関数ならできる)

そりゃあ間にVMをかましてるんだから原理的には出来るだろうけど(一時記憶にメモリを使わずファイルに書き出すとかね)
まともな実効速度が出るはず無いしメリット何も無いから誰もやらないだけ。
それを出来るというには無理がある。

C/C++だって同じようにVM作れば出来る。同じようにメリット無いから誰も作らないだけ
0331デフォルトの名無しさん2015/09/21(月) 22:12:17.14ID:tvQQ1s/5
>>328
typeid
0332デフォルトの名無しさん2015/09/21(月) 22:15:54.75ID:rFlrDRn6
>>331
ありがとう
こんな機能があったとは知らなかった
0333片山博文MZ ◆T6xkBnTXz7B0 2015/09/21(月) 22:17:34.32ID:3iy+9eBG
VirtualProtectみたいな関数ってMacやLinuxでもあるの?
0334デフォルトの名無しさん2015/09/21(月) 22:20:25.72ID:0lL32CsL
>>321
大体クラスとか関数単位でプログラムをロードして実行出来たところで4GBのメモリ制限に蚊に刺されるほどしか影響しねえよ
お前は実行されるコードが数GBになるプログラム作ったことあるんか?と
そんなのより普通はデータを記憶するためのヒープが圧倒的に足りなくなる
0335デフォルトの名無しさん2015/09/21(月) 22:21:24.48ID:0lL32CsL
>>333
mprotect
0336デフォルトの名無しさん2015/09/21(月) 22:34:48.88ID:IzwQBNZR
>>323-324
確認した結果、確かにそのようだ。こちらの勘違いだった。
こちらは純粋C++ではなくVC++遣いなので、少し混乱していた。すまん。

>>325
手動ならそういうことになる。CLRはそれを自動的にやっている。

>>330,334
CLRはそうなっている。文句はMSに言ってくれ。
個人的には、自分で書いた部分だけで4GBを越えることは今後とも無いとしても、
C/C++の場合はDLLも含めて4GBだから、こちらは越える時があるのかもしれないとは思う。

生ポインタを渡さず抽象化している場合は、一つのarrayにつき4GBの制限になる。
だから実質的にデータ部分も含めても4GBの制限がないのと同じ。
ただ素直に64bitに移行する方がいいと思うし、実際にMSもそういう判断だと思うが。
0337デフォルトの名無しさん2015/09/21(月) 22:39:34.79ID:tvQQ1s/5
>>336
あんたの使ってるのはVC++ではなくてC++/CLIなので
ttp://peace.2ch.net/test/read.cgi/tech/1268613679/
スレはこっち

>>310のサイトでもC++/CLIをC++だと間違って書いていて
迷惑この上ない
0338デフォルトの名無しさん2015/09/21(月) 22:49:46.15ID:QVf3KibQ
数GBにもなるプログラムってあるのかな
何か間違っている様な気がする。
分割して10個〜20個くらいに分割した方が良くないかな・・
0339デフォルトの名無しさん2015/09/21(月) 22:53:28.63ID:0lL32CsL
>>33
MSに文句も糞もねえよ
仕様上は出来る、同じようにC言語だって仕様上は出来る
でも使える速度にならないから使えねえって言ってんの
MSだってそんな事わかってるからそんな実装にしてないだろ

実質使えないものを出来るって主張して何がしたいのか?
0340デフォルトの名無しさん2015/09/21(月) 23:01:45.88ID:IzwQBNZR
>>337
> >>310のサイトでもC++/CLIをC++だと間違って書いていて
なるほどそういうことか。そう思って読めば確かにそうだ。
以前おかしいと思っていた説明部分も見あたらない、、、こちらも勘違いだったのかも。すまん。

> あんたの使ってるのはVC++ではなくてC++/CLIなので
使っているのはVC++だぞ。
C++はVC++6.0までだというのならそれは認めるが。

ただ、Windows上で一番お手軽なC++風の環境はVC++なんだよ。
ただそれは実はC++/CLIであり、似て非なる言語なところが問題なんだが。
とはいえ、アンマネージで全部書けば限りなくC++に近くなるはずではあるし、
「初心者のための」なんだから、その辺はいいとは思うけど。
0341デフォルトの名無しさん2015/09/21(月) 23:04:28.14ID:tvQQ1s/5
初心者こそC++/CLIなんて変態言語ではなく
CLRを使うのならC#を使うべきだ
0342デフォルトの名無しさん2015/09/21(月) 23:11:16.76ID:XzxcjOEi
>ただ、Windows上で一番お手軽なC++風の環境はVC++なんだよ。
>ただそれは実はC++/CLIであり、似て非なる言語なところが問題なんだが。

ほら、もう何にも分かってなくね
プロジェクトを作る時にCLRにするかどうか選べる
CLRにしなければ普通のC++だ
どこまで勘違いでスレを混乱させたら気が済むの?
0343デフォルトの名無しさん2015/09/21(月) 23:12:45.18ID:IzwQBNZR
>>339
勘違いしているのだと思うけど、
C#は完全にCLR上で動いていて、関数は動的配置だぞ。これはいいか?
批判的なのはいいが、事実としてC#は既にそうなんだよ。

ランタイムまで自分で作る気ならCでもできるとも言えるが、それは普通は出来ないと言うよ。
C#の場合はそこまで含めて勝手にやってくれる。
つまり、ポインタのサイズを意識する必要がない。
Javaに至ってはポインタがないんだからポインタのサイズも糞もない。

ランタイムなんて糞遅いというのは事実なんだけど、
実際、そういう糞遅いアプリでも問題ない場合の方が大半なんだよ。
0344デフォルトの名無しさん2015/09/21(月) 23:16:50.51ID:XzxcjOEi
それってJITのためであって
32bitの壁とか関係なくね?
C++はコンパイル言語なんでJITは無いから
始めから関係なくね
0345デフォルトの名無しさん2015/09/21(月) 23:17:06.84ID:tcBLogIW
>>331
意地悪な回答だな
type_index教えてやらないと使いにくくてしょうがないだろ
0346デフォルトの名無しさん2015/09/21(月) 23:19:54.09ID:IzwQBNZR
>>338
DLLのロード/アンロードはOSがやるから出来るのだけど、
C/C++の場合はDLL先の生関数ポインタも仕様的には掴めるはず。
だから、実質的にはDLLのアンロードは出来ない。
(正確に言うと、アンロード後の空間に別のDLLを配置しなおすことは出来ない)

よって、同様に、C/C++の場合は、DLLやフレームワークまで全て含めて4GBの制限になる。
今のところまだかからないけど、今後は分からないよ。

それとは別に、マルチプロセス/プロセス間通信で実現するというのはありだ。
0347デフォルトの名無しさん2015/09/21(月) 23:26:54.98ID:IzwQBNZR
>>342
> CLRにしなければ普通のC++だ
そうだったのか。了解した。

>>344
> 32bitの壁とか関係なくね?
いや、関係ある。
生ポインタを渡す限り、アドレス空間の再利用が出来ないから、
一切合切含めて4GBの制限がかかってしまうという話。
生ポインタを渡さない場合は、この制限が無くなる。

ただその制限がないとして、今の時点では特にメリットが無いというのも認める。
0348デフォルトの名無しさん2015/09/21(月) 23:27:29.86ID:tvQQ1s/5
CLRだろうが32bitアプリのvirtual sizeが4Gを超えることはないんじゃないか

>>346
FreeLibraryすればdllは解放されるだろ
そのあとつかんだ関数ポインタの先は無効になるだろうし
解放した領域に別のdllが読み込まれても問題がない
0349デフォルトの名無しさん2015/09/21(月) 23:30:33.86ID:XzxcjOEi
>>348
これ以上引っ掻き回さんでくれ
彼が言ってるのは明示的なFreeLibraryじゃなくてOSが強制的にDLLをアンロードしてスワップする事
0350デフォルトの名無しさん2015/09/21(月) 23:31:24.91ID:IzwQBNZR
>>341
今はそう思うけど、
C既習だと、C++と付いている方が安心するんだよ。
0351デフォルトの名無しさん2015/09/21(月) 23:31:52.49ID:XzxcjOEi
あと、C#の関数が動的なのはJITの為であって
32bit空間でスワップしてやろうって意図はないはず
C++にJITは無いので動的である必要もなし
0352デフォルトの名無しさん2015/09/21(月) 23:32:52.24ID:0lL32CsL
>>343
それで、そのCLIは何で実装されてるのかな?どうやって動くのかな?
そこまでちゃんと考えてる? 4GBの制限はポインタサイズだけの問題だと思ってないよね?
0353デフォルトの名無しさん2015/09/21(月) 23:35:35.38ID:IzwQBNZR
>>349
> 彼が言ってるのは明示的なFreeLibraryじゃなくてOSが強制的にDLLをアンロードしてスワップする事
そういうこと。

>>348
自分で管理してFreeするのならそれは出来る。
ただこの場合は自分で掴めるアドレス全体が4GBの制限にかかる。
CLRだと仕様的にはいくらでもつかみ放題だということ。管理する必要もない。
0354デフォルトの名無しさん2015/09/21(月) 23:40:33.83ID:IzwQBNZR
>>352
どうやら君は理解できていない。
動的再配置の場合は、今まさに使っているもの以外は見えないんだよ。
だから、全体で4GBではなくて、各部品が4GBの制限になる。これは理解できているかい?

すまんが空回りするようならこの話はここら辺で終わりでいい。
他の人は理解できているから。
0355デフォルトの名無しさん2015/09/21(月) 23:44:22.13ID:XzxcjOEi
嫌、俺も理解できてないし、バカなこと言ってるなって思っているから
もっと続けていいぞ

>>352の言いたい事は、CLRそのものは何ビットで動いているんだという事
CLRそのものが32bitで動いていては、どの道4GB以上は扱えないよね
0356デフォルトの名無しさん2015/09/21(月) 23:47:39.61ID:0lL32CsL
>>354
ほらまた自分の思い込みを積み重ねて…
なんか相手するのがめんどくさくなったから >>355 さんに任せようかな!
0357デフォルトの名無しさん2015/09/21(月) 23:49:41.24ID:IzwQBNZR
>>351
なるほどその通りだ。
関数がGCされるのは結果的なことかもしれないね。
0358デフォルトの名無しさん2015/09/21(月) 23:50:48.00ID:0lL32CsL
まぁ最後に一つだけこれは理解出来るだろうというのを
そんなに簡単な話だったら32bit版.netフレームワークに4GBの制限なんてないよね
0359デフォルトの名無しさん2015/09/21(月) 23:57:39.16ID:IzwQBNZR
>>355
MMUでググレ。
32bit空間でリニアに使えるのは4GBなんだけど、交代で再配置するのなら実はいくらでもいける。
ただしユーザに与えた生ポインタを変更することは出来ないため、C/C++では4GBに事実上制限される。
GC前提の場合は、この制限は見えなくなる。
0360デフォルトの名無しさん2015/09/22(火) 00:04:04.39ID:JsyQDq8z
他人が書いたコードを読むのは
超労力がかかる

オナニーコードは
超面倒な
0361デフォルトの名無しさん2015/09/22(火) 00:06:58.92ID:ThaQ2i1X
32bit上で4GB制限を突破させる機能の名前はx86ならPAEな
それを使ってもMMUの管理する仮想アドレス空間は4GBのまま
0362デフォルトの名無しさん2015/09/22(火) 00:12:11.77ID:dkFhdmkv
CLRが勝手に関数(コード)をアンロードするわけないだろ。何考えてるんだ?
0363デフォルトの名無しさん2015/09/22(火) 00:18:17.64ID:FQwXFz67
アンロードはしないけどシリアライズしてメモリ以外に保存する実装があってもおかしくはないな
もちろん使う側からは透過的に
0364デフォルトの名無しさん2015/09/22(火) 00:24:52.12ID:ThaQ2i1X
>>363
それ実行ファイルがディスクにあるはずなのにシリアライズして保存する意味がわからねーな
直前にJITコンパイルしたバイナリを一時的にディスクに保存してから実行するとかならまぁ解るけど
0365デフォルトの名無しさん2015/09/22(火) 00:26:02.37ID:PT+IC+/U
>>363
CLRはMSILという中間言語を実行時にJITして配置するから、
結果的に各関数は使うまで配置されないし、使い終わったら捨てられるのかと。
多分オリジナルのMSILはstaticに存在するのではないかと。
ただそれがメモリ上である必要はないが。
結果的に透過的になる。
https://msdn.microsoft.com/ja-jp/library/z1zx9t92.aspx
0366デフォルトの名無しさん2015/09/22(火) 00:36:49.33ID:PT+IC+/U
>>361
そこまで知っているのなら俺が言っていることの意味は分かるはずだが。
PAEまで使えばとりあえず4GBx10までは見える。

ただ、PAEがマトモに使えるようになったのはWin8からだ。
そして、そんなことをやるより64bitに移行するのをMSは選択した。
XPにPAEという声も根強かったが、ガン無視したからね。(それで正しいと思うが)
0367デフォルトの名無しさん2015/09/22(火) 00:42:01.36ID:dkFhdmkv
>>365
コードの場合「使い終わった」を自動的に判定する方法が無いでしょ
勝手なアルゴリズムで判定されても困るので、現実にはそんな実装は使い物にならない
現実にはプログラマーが明示的に指定するしかないんだよね
0368デフォルトの名無しさん2015/09/22(火) 00:53:02.41ID:rOSfUNAw
>>367
いえ関数の実行が終わったら捨ててもいいです
0369デフォルトの名無しさん2015/09/22(火) 00:57:27.51ID:PT+IC+/U
>>367
各クラスのメンバ関数は、そのクラスのインスタンスが全て無くなれば要らなくなる。
当たり前だが、GC上のオブジェクトについては全て「型」を知っている。
だから、GCヒープしか提供していない言語であれば、全く問題なく回収可能。

それ以前に、JIT前提であればとりあえず回収して例外処理で再配置も可能。
コピーオンライトの関数版だ。

とにかく君達が懐疑的なのは分かったが、実際CLRはそうなんだよ。
0370デフォルトの名無しさん2015/09/22(火) 01:00:19.19ID:WExvsg0o
そんなゴミ実装してるわけねーだろ
常識で考えろ
0371デフォルトの名無しさん2015/09/22(火) 01:03:28.46ID:rOSfUNAw
>そのクラスのインスタンスが全て無くなれば要らなくなる

なんだその非論理的な思考は
X x = new X();
x.Baka();
x = null; //よし、いらなくなった!かいほうだ!!
x = new X();
x.Baka();
0372デフォルトの名無しさん2015/09/22(火) 01:09:52.47ID:RZYVlzX/
GCの実装を妄想で語るスレ?
0373デフォルトの名無しさん2015/09/22(火) 01:11:24.05ID:PT+IC+/U
>>371
X x = new X(); //ここで初めてオブジェクトのメンバ関数も配置される
x.Baka();
x = null; //これ以降解放してよし。GC対象。
x = new X(); //ここで再びXがメンバ関数と共に配置される
x.Baka();
0374デフォルトの名無しさん2015/09/22(火) 01:15:38.85ID:RZYVlzX/
.NETのGCも一般のGCの機構も理解してないみたいだね
全てが参照カウントだと勘違いしてる

アセンブリの機構考えれば、即時開放がありえないとわかると思うけど
何でそんな実装だと思ったんだろ?
0375デフォルトの名無しさん2015/09/22(火) 01:16:15.49ID:ThaQ2i1X
>>369
どうなんだよ
実際32bit版で4GB越えれるのかよ?
仕様上はできるっていうならC言語でもできるって言ったよな?
0376デフォルトの名無しさん2015/09/22(火) 01:17:40.85ID:PT+IC+/U
てかまあもうスレチだし止めよう。

とにかくCLRはそうなんだよ。
ググッてもなかなかでてこないのだけど、(いいキーワードが思いつかない)
例えば delegate というのは関数ポインタなんだけど、これはへまをするとGCされる。
https://msdn.microsoft.com/ja-jp/library/43yky316(v=vs.110).aspx
http://kchon.blog111.fc2.com/blog-entry-139.html
https://msdn.microsoft.com/ja-jp/library/17sde2xt(v=vs.90).aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-3
0377デフォルトの名無しさん2015/09/22(火) 01:19:10.62ID:PT+IC+/U
>>375
分かりやすく書いただけ。
もっと分かりやすく言えるのなら、君が371にレス付ければいい。

要するにエラーにはならないということが明確に分かればいいだけだろ。
0378デフォルトの名無しさん2015/09/22(火) 01:23:12.34ID:rOSfUNAw
そうかそうか
>>373はクラスロード時にJITコンパイルが行われると勘違いしちゃったんだな
それでオブジェクトの寿命とリンクするという珍妙な発想に至ったと
0379デフォルトの名無しさん2015/09/22(火) 01:24:00.21ID:PT+IC+/U
>>375
32bit版とかいう概念がJavaやC#の仕様にないってことだよ。
そこは既に抽象化済みなんだよ。

はいもうこの件は終わり。
PAEまで使って32bitを延命させる意味はないとMSが判断した以上、.NETもそれに追従だ。
今後はどうなるかは知らない。
0380デフォルトの名無しさん2015/09/22(火) 01:28:11.27ID:ThaQ2i1X
>>375
> 32bit版とかいう概念がJavaやC#の仕様にないってことだよ。
> そこは既に抽象化済みなんだよ。
長々続けて結論それ?
0381デフォルトの名無しさん2015/09/22(火) 01:28:25.18ID:RZYVlzX/
>>376
最初のコード例、自分でGC呼んでる時点で即時開放理論が破綻してるじゃん
なんで自分で理解できてないサイトをなんで出すの?
0382デフォルトの名無しさん2015/09/22(火) 01:37:37.39ID:RZYVlzX/
あー…、読み返したらプロセスアドレス空間もまともに理解せずに
MMUで拡張できるとか言ってるレベルなのねこの人
0383デフォルトの名無しさん2015/09/22(火) 03:17:16.45ID:+Z/sOppv
なんかスレ伸びてると思ったらスレ違いのことで伸びてるのか。
> そのクラスが使用される時にメンバ関数がメモリ上に配置され、不要になれば回収される。
C#なら回収されるのはアプリケーションドメイン単位
>>376
それはおそらく関数ポインタを入れてる変数がGCされている
0384デフォルトの名無しさん2015/09/22(火) 03:20:50.96ID:PT+IC+/U
>>375
ちなみに知らないのだとおもうが、PAE対応アプリもあるにはある。
SQL Server とか、他にも一つか二つくらいあったはず。逆に言えばそれくらいしかなかったと思う。
> この結果、アプリケーションは 15 GB までの物理メモリにアクセスできます。
https://msdn.microsoft.com/ja-jp/library/Cc785115(v=WS.10).aspx
https://technet.microsoft.com/ja-jp/library/ms175581(v=sql.105).aspx

APIはMapUserPhysicalPagesで窓アクセスになる。
https://msdn.microsoft.com/ja-jp/library/windows/desktop/aa366527(v=vs.85).aspx

てかこの件について君らがムキになる意味が分からん。
ランタイムで隠蔽すれば普通に出来る。(ユーザーが全く関知する必要がない=同じソースコードで動く)
ただし出来るのとやるのは別で、MSは64bit化を急ぐという判断だった。
PAEは延命で、64bit化は解決なのだから、妥当な判断だと思う。
逆にLinuxはPAE派だったと思ったが、どうなったのかは知らない。
0385デフォルトの名無しさん2015/09/22(火) 03:21:26.35ID:PT+IC+/U
広範囲にランダムアクセスをするのでなければ、窓アクセスでもそこそこ使える。
オブジェクト指向なら見えないもの(privateやスコープ外)の方が多いのだから、
ランタイムがしこしこ貼り直してくれれば問題ない。
これを手動でやるとなると、実際には管理しきれないから、
単純なキャッシュ的使い方にするか、あるいはラッパを用意するかになる。
もちろんそれでもやりたい人はやれるようにAPIがあるわけだが。
> 大量のデータを操作するアプリケーションが、ハード ディスクの代わりにメモリにデータを維持することで、パフォーマンスが向上します。
https://msdn.microsoft.com/ja-jp/library/cc775523(v=ws.10).aspx

C/C++はメモリモデルがフラットで、リニアにアクセスできる前提だ。(ポインタは常にアクセス可能)
だから4GBの壁が直接見える。
C#とかはそもそもメモリモデル自体が必要ない。
変数はただの箱で、前回入れたものが出てくるだけ。共用体は禁止だ。
だから4GBの壁なんてものがそもそも存在しない。
ランタイムさえ対応すれば同じソースでPAE/AWEで15GBまでヒープ上に確保できることになる。
(C#のArrayは必ず添字チェックをしているため、ランタイム側で細切れに貼り直すことが出来、
結果、ユーザ側に15GBの一つのArrayを確保することも可能。)
ただしMSはこれを目指さなかった。

特に不思議なわけでもなく、ムキになる話でもないと思うが。
GCヒープ自体が一つのオブジェクトみたいなもので、get/setしかインタフェースを提供してない。
だからこういう事が普通に出来る。
(ただし繰り返すが、出来るのとやるのは別)
0386デフォルトの名無しさん2015/09/22(火) 03:33:20.14ID:ThaQ2i1X
>>385
だから何度も言ってるように仕様はそうかもね、でも仕様の話だったらC言語でも可能だよ
で実装はどちらも対応してないよね
0387デフォルトの名無しさん2015/09/22(火) 03:36:37.45ID:RZYVlzX/
そらあらゆる機能を使えば「可能」だろうが
あんた「実際」とか「たぶん」とか実装の話してただろ
.NETは無闇にアンロードはしないよ
0388デフォルトの名無しさん2015/09/22(火) 03:37:04.93ID:RZYVlzX/
>>387は>>385宛てね
0389デフォルトの名無しさん2015/09/22(火) 04:21:48.04ID:RZYVlzX/
C#単体での仕様にすら注意書きに
実装では不要かどうかは将来使われるか解析してから決めるだろうとか書いてある
ちょっとひどすぎませんか?
0390デフォルトの名無しさん2015/09/22(火) 04:22:58.08ID:PT+IC+/U
>>386
そうじゃなくて、Cの場合は sizeof(void*) が確定的なんだよ。
だから32bit版というものが絶対的に存在してしまう。
C#にはそれがないって話。

ただこれは379と同じなんだけどね。
0391デフォルトの名無しさん2015/09/22(火) 04:24:02.48ID:PT+IC+/U
>>384
> C#なら回収されるのはアプリケーションドメイン単位
了解した。

> それはおそらく関数ポインタを入れてる変数がGCされている
その線は考えたが、、、まあ上記と合わせて冷静に考えればそのようだ。

ここの人達は関数の動的配置/回収をそもそも信じていない。
だから回収事例として用意したつもりだが確かに間違いのようだ。
動的関数生成をしないのなら、GCする必要もなく、回収がAPドメイン単位なら静的展開してそれっきりだね。
ちなみに回収タイミング/単位自体は俺は気にしておらず、動作できる例として出していたのだが、
そこに噛みつく奴がいて余計におかしな事になった。
ただまあ、APドメイン単位での回収で確定だし、助かった。
> プロセス全体を停止せずに、個々のアプリケーションを停止できます。 アプリケーション ドメインを使用すると、1 つのアプリケーション内で実行されているコードをアンロードできます。
> 個々のアセンブリや型はアンロードできません。 アンロードできるのはドメイン全体だけです。
https://msdn.microsoft.com/ja-jp/library/2bh4z9hs(v=vs.110).aspx

ただこれならもうちょっとC++/CLIは緩くてもいいはずなのだが、、、
他クラスのpublicメンバ関数を呼ぶ場合もstaticじゃないとC2352エラー(下側例)になるのだが、これは何故?
APドメイン単位で展開してるのなら呼ばせてくれよーと思う。(これがあるから型単位だと思っていた)
https://msdn.microsoft.com/ja-jp/library/2x426hte.aspx

なお回答頂けるのであれば、CLIスレで構いません。
http://peace.2ch.net/test/read.cgi/tech/1268613679/
0392デフォルトの名無しさん2015/09/22(火) 04:25:27.88ID:PT+IC+/U
すいません、>>391は>>383宛て
0393デフォルトの名無しさん2015/09/22(火) 04:36:51.05ID:RZYVlzX/
>>390
sizeof(void*)は確定的じゃないし
そもそもメモリアドレスって物理アドレスそのまま使ってるわけじゃないよ
0394デフォルトの名無しさん2015/09/22(火) 04:44:57.21ID:RZYVlzX/
>>391
>とにかく君達が懐疑的なのは分かったが、実際CLRはそうなんだよ。
って言ったんだから自分でGC呼んじゃ駄目でしょ
0395デフォルトの名無しさん2015/09/22(火) 05:53:43.52ID:ThaQ2i1X
>>390
Cのソースコードに32bit版も何ももありませんけど?
ついでにいうと事前にネイティブコードに変換しなければならないというCの仕様もありません
C言語のインタプリタも可能ですし実際にあります
で、何が確定的ですか?
0396デフォルトの名無しさん2015/09/22(火) 06:51:30.72ID:4+3Ce3pv
専用ハード作って動かせばなんでもできるよ
0397デフォルトの名無しさん2015/09/22(火) 06:59:57.30ID:BmBfsQQC
>>305
> これが何故、ビルドエラーしないのでしょうか。

この一文で読む価値のないページってわかる w
0398デフォルトの名無しさん2015/09/22(火) 08:40:28.48ID:lcSEArpd
自説に絶対の自信ニキ
vs
違う、違うよ(その他全員)

の構図が大変面白い
よろしい、続けたまえ

スレ移動して誘導先張ってくれると
なおありがたい
0399デフォルトの名無しさん2015/09/22(火) 08:51:45.99ID:QigibK2U
>>385
>C/C++はメモリモデルがフラットで、リニアにアクセスできる前提だ

いえ、ISO/IEC 14882:2014はそうはなってないと思います
0400デフォルトの名無しさん2015/09/22(火) 11:22:32.99ID:LojobDxZ
やっぱりマシンがどのように動作しているか理解するには、c言語が理解できる程度の脳ミソがないと難しいのかね。
0401デフォルトの名無しさん2015/09/22(火) 11:52:36.13ID:PT+IC+/U
>>399
どれのこと?Nxxxxでよろしく。またはググるからキーワードをくれ。
http://www.wdic.org/w/TECH/ISO/IEC%2014882%3A2014
0402デフォルトの名無しさん2015/09/22(火) 11:54:51.98ID:PT+IC+/U
スレチだが、動的関数配置に関してはもうちょっと分かりやすい例があった。
> DynamicMethod クラス
> コンパイル、実行、および破棄できる動的メソッドを定義し、表します。 破棄されたメソッドは、ガベージ コレクションの対象となります。
> Just-In-Time (JIT) コンパイラ によって作成された実行可能コードは、DynamicMethod オブジェクトがクリアされたときにクリアされます。
https://msdn.microsoft.com/ja-jp/library/system.reflection.emit.dynamicmethod(v=vs.110).aspx

C/C++ではやってない話だから気味が悪いのだと思うが、とにかくCLRの世界はこんな感じなんだよ。
なおこれは既存のMSIL(中間言語)をコピーするようなので、生成ではなく流用になる。(evalではない)
0403デフォルトの名無しさん2015/09/22(火) 12:49:28.58ID:RZYVlzX/
>>402
それ標準実装じゃないだろ
それを「とにかくCLRの世界はこんな感じ」って無茶言うなよ
0404デフォルトの名無しさん2015/09/22(火) 13:10:51.94ID:ThaQ2i1X
>>401
お前が
>C/C++はメモリモデルがフラットで、リニアにアクセスできる前提だ

な根拠を出さなきゃいけない立場なの

あと確定的ってのも
0405デフォルトの名無しさん2015/09/22(火) 13:33:48.83ID:LojobDxZ
そういう機能を実現するために使う言語だからそういう機能の標準化がしづらいんだよ。
0406デフォルトの名無しさん2015/09/22(火) 13:34:44.79ID:dkFhdmkv
まだやってるのか…
>>402
元々staticキーワードの有無によってできる関数の違いの話じゃなかったっけ?
なんでプログラムが実行中に組み立てたメソッドの話になってるの?

それで100レスくらい使って>>302や>>321で書いてた疑問や間違いについて少しは理解できた?
0407デフォルトの名無しさん2015/09/22(火) 13:45:48.19ID:39XjsZ/s
どうでもいいが、32bit版の.Netアプリって
32bit版の.NET Framework上で動くんじゃないの?
というのも32bitアプリからは64bitDLLを読み込めないから
だから32bit版の.Netアプリは32bit版.NET Framework上で動くと思うんだけど
(その辺の事情はスレ違いだしよく知らんが)
フレームワーク側、.Net側、管理側が32bitで4Gの壁があるのに、
その制限の中で4G以上のコードのスワップの運用をするの?
そんな実装はありえないと思うんだが

MMUの話が上がっていたが、あれはハードウェアで高速だし、
MMUは物理メモリが足りない場合にスワップする用途だが、
今足りない前提になっているのは論理アドレスの方なわけで
論点がズレてるわな
0408デフォルトの名無しさん2015/09/22(火) 13:57:03.37ID:PT+IC+/U
俺の疑問(302)は解消したよ。
お前らの疑問はあるみたいだし、それについて説明も出来るけど、もう面倒なので止める。
誰か分かる人は回答してやってくれ。

てかお前らもうちょっと他言語も触った方がいいぞ。
Cの世界だけで閉じているから、Cを客観的に見れてないんだよ。


それとは別に、401に対する回答は募集する。
0409デフォルトの名無しさん2015/09/22(火) 14:05:36.49ID:RZYVlzX/
虚勢ばっかりだな
0410デフォルトの名無しさん2015/09/22(火) 14:15:49.93ID:WwQzZTLz
いい加減スレ違いの話は収束して欲しい。
0411デフォルトの名無しさん2015/09/22(火) 14:41:30.97ID:ThaQ2i1X
ブーメランな捨て台詞で終わったな
0412デフォルトの名無しさん2015/09/22(火) 16:14:28.65ID:o5uWY3Fx
>>408
C++はオブジェクト以外の領域をポインターで指すこと自体出来ないんだからわかれよ
int a;
(&a + 1); // undefined behavior

1.7 The C++ memory model
The memory available to a C++ program consists of one or more sequences of contiguous bytes
"sequence"は複数形だぞ
0413デフォルトの名無しさん2015/09/22(火) 16:31:50.22ID:LojobDxZ
そもそも16bitアプリでfarやhugeでそれ以上の領域扱うなんて当たり前だったろうに。
cにもc++にもリニアなメモリ空間という縛りはない。
だいたいポインタが何者かすらその挙動でしか定義されていない。
実装次第でどうにでもなる。
0414デフォルトの名無しさん2015/09/22(火) 16:34:20.90ID:FVa42+rI
>>412
本題とはずれてくるけど、 &a + 1 は undefined じゃないよ。
*(&a + 1) にアクセスしたり &a + 2 すると undefined になる。
0415デフォルトの名無しさん2015/09/22(火) 16:34:29.27ID:nPjcOL1Q
そもそもメモリ空間やリニアうんたらまで考慮してプログラムしなきゃあかんのか。
0416デフォルトの名無しさん2015/09/22(火) 16:37:24.66ID:4a3z373J
俺が感じるのは
int a;はaのアドレスの位置を直接番号で示していると思うんだ
int a[10];と書くとアドレスの先頭のアドレスの番号を示していると思うんだ
a=a+1と書くとaは変数ではなく番号だからエラーになるんだと思うよ
0417デフォルトの名無しさん2015/09/22(火) 16:40:57.49ID:BmBfsQQC
>>414
配列じゃないんだけど?
0418デフォルトの名無しさん2015/09/22(火) 16:42:13.67ID:gQIVdZQM
>>416
配列名を示す識別子を,配列要素を指定する[] を伴わずに単独で使用する用法は,特異点にしてC/C++にて一番醜いところ
0419デフォルトの名無しさん2015/09/22(火) 16:51:41.05ID:WExvsg0o
いちいち&a[0]と書けと?
&a[0]のほうが醜いと思うが
0420デフォルトの名無しさん2015/09/22(火) 16:59:16.98ID:PT+IC+/U
>>412
> contiguous bytes
他の言語ではこの必要すらない。
これがリニアって事だよ。

ちなみに君はC以外の言語一つでも使えるかい?
だったらその言語でこの必要があるかを考えてみるといい。
0421デフォルトの名無しさん2015/09/22(火) 16:59:35.71ID:FVa42+rI
>>417
配列じゃないオブジェクトへのポインタ演算のルールは要素数 1 の配列といっしょ。
5.7 [expr.add] p4
> For the purposes of these operators, a pointer to a nonarray object
> behaves the same as a pointer to the first element of an array of length
> one with the type of the object as its element type.
0422デフォルトの名無しさん2015/09/22(火) 17:07:12.07ID:gQIVdZQM
>>419
構造体・クラスの場合は,単独の識別子でアドレスを示すことはないだろう?
それと同じことだ
0423デフォルトの名無しさん2015/09/22(火) 17:16:16.72ID:WExvsg0o
構造体と配列は大きさが違うだろう
0424デフォルトの名無しさん2015/09/22(火) 17:30:38.04ID:RZYVlzX/
>>420
それ実装じゃなくて抽象機械相手のもので
x86の論理アドレスや物理アドレスなどとポインタと同一なんて規定は書いてない
JITにしてでコンパクションしてアドレス変更されようがCは関係ない

お前本当都合が良いと思った事しか答えないな
いい加減どこが決定的な問題なのか説明しなよ

それとずっと逃げてないで
sizeof(void*)が確定的という事についても説明してね
0425デフォルトの名無しさん2015/09/22(火) 17:33:33.60ID:gQIVdZQM
>>423
大きさ?なんの話だ?
struct a { int n1; int n2; int n3; }
int b[3];
どちらも同じ集合体だが a と b で意味するものが違うのは不整合だろう?
0426デフォルトの名無しさん2015/09/22(火) 17:38:23.04ID:RZYVlzX/
つか言語仕様にunsafeとfixed持ってる時点で同類なのにアホなのかなこの人
0427デフォルトの名無しさん2015/09/22(火) 17:40:24.63ID:RZYVlzX/
>>426は>>425宛てじゃないからね
0428デフォルトの名無しさん2015/09/22(火) 18:22:00.45ID:WwQzZTLz
>>425
それ、違くない?
struct {int n1; init n2; int n3;} a;
int b[3];
printf("%p",a);
printf("%p",b);
エラーにはならない。
0429デフォルトの名無しさん2015/09/22(火) 18:26:29.93ID:WwQzZTLz
>>428
ごめん、a,bの前に&がいる。
0430デフォルトの名無しさん2015/09/22(火) 18:53:37.56ID:BmBfsQQC
>>421
なるほど、勉強になったわ
0431デフォルトの名無しさん2015/09/22(火) 18:59:44.87ID:PT+IC+/U
>>424
別に逃げているわけではなくて、
今の君の知識範囲では理解できないだろうから諦めたんだよ。
もう既に十分説明している。
俺の疑問は既に解消したのだから、君の突っかかりにいちいち答える必要もない。

君は知っているつもりなんだろうけど、全然分かってない。
元々のブログ(>>295)、以下のくだりは真なんだが、そもそもこれを理解できてないだろ。
> たとえば、32bitのCPU上では、通常のプログラムは、4GBのメモリ空間に制限され、4GB以上のメモリを利用することは非常な困難を伴います。
> ところが、JavaやC#といった言語は、原理上、そのような制限を受けません(バンク切り替えだとか、セグメントだとかの話はあえて無視)。
> あくまでも原理上の話ではあるので、現状がそうなっているわけではないのですが、ポインタといった概念が言語上に出現しないことによって、
> データをメモリ上の番地で表現する必要がないためです。

俺はこの部分の説明をしていただけなんだよ。ただ、君が理解できていないとなると、その前の部分
> C/C++のプログラマの住んでいる世界は、ポインタがあるおかげで、ある意味では、何でも出来るアセンブラの世界ではあるのですが、
> そのことが逆にC/C++プログラマの発想を狭い範囲に閉じこめてしまっていることが多々あります。
> JavaやC#のようなポインタのない世界が実は、
> アセンブラのようなポインタというかアドレスに支配されている世界では想像しにくい新たなパラダイムや手法を与えてくれることもあります。
も真なのかな、とも思えてくる。(個人的にはこの部分はハズレだと思っていた。)


君が無知なままでいるのは君の責任だ。
誰かが君のことを可哀想と思うのなら、いつか教えてくれるかもしれない。
俺はここに認めてもらいに来たわけではなくて、疑問を解消しに来ている。だから用は済んだ。
君が俺のことを誤解するのも君の自由だ。それを修正する必要もない。

ただなあ、とりあえず最初のブログの中身も理解出来ないのにその態度は、痛いよ。
そういうのは止めた方がいい。
傍観している連中の中にも明らかに分かっている奴もいるはずだが、誰も出てこないのはそういうことだよ。
0432デフォルトの名無しさん2015/09/22(火) 19:11:33.18ID:FVa42+rI
>>431
>> ところが、JavaやC#といった言語は、原理上、そのような制限を受けません(バンク切り替えだとか、セグメントだとかの話はあえて無視)。
>> あくまでも原理上の話ではあるので、現状がそうなっているわけではないのですが、ポインタといった概念が言語上に出現しないことによって、
>> データをメモリ上の番地で表現する必要がないためです。

これがポインタの存在によって C や C++ に限っては成り立たないと言われているようだけど、
そんなことはないと思うんだ。

言語上の「ポインタ」を Java や C# の参照と同じように実装することは禁止されちゃいないわけで。
そこらへんわかってて言ってるの?
0433デフォルトの名無しさん2015/09/22(火) 19:20:45.42ID:ThaQ2i1X
>>432
こいつは何言っても解らないよ
可哀想なやつだと思うけど俺は諦めた
0434デフォルトの名無しさん2015/09/22(火) 19:23:21.47ID:39XjsZ/s
毛の壁風の人なんじゃね?
0435デフォルトの名無しさん2015/09/22(火) 19:24:45.07ID:PT+IC+/U
>>432
生ポインタを使えないC言語なんて存在価値がないだろ。

実際それがあったとして、使う奴がいるとも思えないが、
ネイティブコードを吐くJavaが欲しい時に使うのか?
04364322015/09/22(火) 19:26:32.23ID:FVa42+rI
>>433
そうだね >399 からそう言われてるわけで、説得できるとはあんまり思ってない。
堂々と「以下のくだりは真」というのにツッコミ無しっていうのはマズいだろうと思った。
0437デフォルトの名無しさん2015/09/22(火) 19:27:26.06ID:ThaQ2i1X
ほらなw
Emscriptenとかも知らないんだろう
0438デフォルトの名無しさん2015/09/22(火) 19:33:20.20ID:FVa42+rI
>>435
存在価値の話は関係無いと思うんだ。引用箇所は
>>> あくまでも原理上の話ではあるので、現状がそうなっているわけではないのですが
という話だからね。 C や C++ でも同じことでしょ、と言っている。
0439デフォルトの名無しさん2015/09/22(火) 19:34:46.81ID:PT+IC+/U
>>432
ちなみに禁止されていないのは確かだが、C言語では実現出来ないだろ。
C++で演算子のオーバーロードを基本型にも全部やってラップすれば達成可能な気もするが、
ポインタのところに若干制限があった気がする。(ただこの辺は余り詳しくない)
0440デフォルトの名無しさん2015/09/22(火) 19:36:47.03ID:ThaQ2i1X
>>439
Emscriptenでググれ
生ポインタの扱えないC言語(に限らないけど)だぞ
0441デフォルトの名無しさん2015/09/22(火) 19:42:18.38ID:PT+IC+/U
>>437
いやちょっと待て。実はEmscriptenは使用を検討しようとしていた。
理由は生JavaScriptが色々糞だからで、TypeScriptも検討中だ。

それはEmscripten用の書き方だということか?
ならば確かにその記述方法は妥当だろう。
LLVMからの変換だと思っていたが、それ以前にLLVMに生ポインタコードが出ないようにラップするわけだな。
0442デフォルトの名無しさん2015/09/22(火) 19:44:12.61ID:FVa42+rI
>>439
>385 で言ってた↓の根拠は不明で「ポインタのところに若干制限があった気がする。(ただこの辺は余り詳しくない)」ということでいいかな?
> C/C++はメモリモデルがフラットで、リニアにアクセスできる前提だ。(ポインタは常にアクセス可能)
> だから4GBの壁が直接見える。

なんかはっきりした根拠を思い出したら教えて欲しい。
0443デフォルトの名無しさん2015/09/22(火) 19:58:38.83ID:39XjsZ/s
いやもう、彼の頭をデバッグするのバカらしいし、やめようよ
0444デフォルトの名無しさん2015/09/22(火) 19:58:39.53ID:PT+IC+/U
>>438
それは繰り返しにしかならないが、以下の通り。

原理的な話なら、抽象化された変数領域しか持たない言語(C#,Java)では、アドレスというものがそもそも見えない。
だから、4GBの壁がそもそもユーザーに見えない。
これに対して、C/C++では4GBの壁がユーザーに丸見えだ。

>>432のように、ポインタをユーザーがラップして全てint**とかにした場合、それは「ユーザーがそう記述した」という。---(A)
そうではなくて、ユーザーが通常通り int* のまま使っていて、
それをコンパイラだけで int* のネイティブにするのか、int** のJava的参照ポインタにするのかをコンパイルオプションで切り換えられるのなら、 ---(B)
それは「コンパイラで4GBの壁を越えた」という。
いずれにしても、C/C++言語自体で4GBの壁を越えたというのは言い過ぎだ。

ところで、Emscriptenは(B)のどちらなのか、知っていたら教えてくれ。
(ユーザ側で int** と意識して書く必要があるのか、
もしかしてユーザーは int* のままで書いてもEmscriptenが int** に完全に変換できるのか)
0445デフォルトの名無しさん2015/09/22(火) 19:59:56.93ID:39XjsZ/s
この感じ、知っている人は知っている、毛の壁臭
0446デフォルトの名無しさん2015/09/22(火) 20:06:26.45ID:PT+IC+/U
>>442
違う。

> ポインタのところに若干制限があった気がする。
演算子のオーバーライドは俺は使ってないので詳しくないのだが、
最近読み直した「プログラミング言語C++」には11.2.3に(第3版ならP317)
> 特に、ポインタだけを操作する演算子関数は定義できないことに注意して頂きたい。
とあって、この件について本の中で別に説明されていたのだが、今見ても該当部分がすぐには出てこないということ。
たしかC言語との互換性を保つために、ポインタ演算子については自由に上書きできない部分があったはず。

> C/C++はメモリモデルがフラットで、リニアにアクセスできる前提だ。(ポインタは常にアクセス可能)
> だから4GBの壁が直接見える。
根拠も何も、そのまんまだ。

逆に聞いてみよう。
君はC#が使えるみたいだが、C#のマネージドコードだけの世界で、4GBの壁を意識することはあったかい?
無いだろ。そういうことだよ。
0447デフォルトの名無しさん2015/09/22(火) 20:14:07.69ID:FVa42+rI
>>444
> これに対して、C/C++では4GBの壁がユーザーに丸見えだ。
これも「気がする」かな。断言するなら根拠をはっきり示せることを確認してね。

> いずれにしても、C/C++言語自体で4GBの壁を越えたというのは言い過ぎだ。
だれもそんなことは言ってないと思うんだ。

「C/C++では4GBの壁がユーザーに丸見えだ」などという人が一人いるので、それは
言い過ぎだと言っている。

>>446
「演算子が上書きできない」→「4GBの壁」っていうつながりがあると思ってるのか。

ループ気味になってきたし、ここまでの書き込みをちゃんと読んで理解しようとしてくれていれば
この流れでそんなこと言えるわけが無いと思うんで、僕もそろそろ降りさせてもらうよ。
0448デフォルトの名無しさん2015/09/22(火) 20:21:17.81ID:PT+IC+/U
>>447
> これも「気がする」かな。断言するなら根拠をはっきり示せることを確認してね。
いや見えてるだろ明らかに。
void*が32bit環境では4GBまでしか表せない。だから4GBの壁が見える。
C#やJavaにはこれがない。それだけの話だよ。

> 「演算子が上書きできない」→「4GBの壁」っていうつながりがあると思ってるのか。
あるだろ。というか言い出したのはそちらだが。
4GBの壁は変数領域が抽象化されていないから見える。
だから、int**にして抽象化すれば直接は見えなくなる。
これがC#やJavaで4GBの壁が見えない理由そのものだ。ブログ主もこの観点で言っている。


まあいいよ。完全にループだし、君の論法もループしている。
降りで了解だ。こちらもその方が助かる。

それはそうとEmscriptenの情報があればよろしく。
0449デフォルトの名無しさん2015/09/22(火) 20:30:45.91ID:39XjsZ/s
何かっこつけてんだよ、初心者の癖に
0450デフォルトの名無しさん2015/09/22(火) 21:15:01.03ID:ozShReaP
クサカベは知ってるけど
毛の何とかは知らないなあ
0451デフォルトの名無しさん2015/09/22(火) 21:58:18.19ID:PT+IC+/U
>>444,448
スレチだが自己解決した。
生ポインタはTypedArrayにマッピングされるようだ。
まあ、冷静に考えれば当然だった。
0452デフォルトの名無しさん2015/09/22(火) 22:12:42.50ID:hQ0EouVl
4GBの壁か。
配列を使う場合など、データサイズの上限なんかは
何言語であろうと普通に何らかの了解のもとに使っているよなあ。
C++ みたいにsizeof(void*)がはっきりしてれば自明の理として納得いくが、
そうでない言語では怪しげなご託宣に従うしかないという
理詰めな性格の人には優しくない話だよね。
0453デフォルトの名無しさん2015/09/22(火) 23:39:14.16ID:PT+IC+/U
むしろ俺は話の通じなさにびっくりだったわ。
32bit環境でのC言語で4GBの壁が見えるのは自明でしかない。
それを見えないと言われても頭おかしいとしか思えない。 >>447

マジでお前らは他言語少しでも触った方がいい。
完全に盲目になっている。
04544122015/09/22(火) 23:51:24.00ID:7b9YUjXM
むしろ
わざわざ>>412で『"sequence"は複数形だぞ』
って書いてやったのに目に入らない盲目にびっくりだわ
0455デフォルトの名無しさん2015/09/22(火) 23:55:40.08ID:PT+IC+/U
>>454
いやそこは関係ないんだよ。

ちなみに君もC/C++しかできないのか?
ちょっとマジで他言語、何でもいいからやってみた方がいい。
0456デフォルトの名無しさん2015/09/22(火) 23:57:25.78ID:LojobDxZ
特定の処理系でvoid*が32bitという話でしかない
まあ、それで99.9%困らないからcpuの機能に薄い皮被せて見せているだけのはなし

16bit時代にhugeやfarでそれ以上にアクセス出来るようにしてあったのは、それですまないほど不便だったから

cやc++はの扱うcpuはハーバードだったり1ワード16bitがアドレスの指し示す最小単位だったりとなんでもあり
0457デフォルトの名無しさん2015/09/23(水) 00:02:54.19ID:M/UFFhhb
32bitで表現できるポインタが4GBまでだが、仮に1アドレスが4バイトでも良いんじゃないかとも思った。
文字列は2文字ないし4文字でワンセットになるけど
0458デフォルトの名無しさん2015/09/23(水) 00:07:22.49ID:Q8fOJWKp
>>453
「32bit環境でのC言語で4GBの壁が見える」が言えるのと同じように
「参照を32bitアドレスで表現しているJava/C#処理系では4GBの壁が見える」とも言える
・・・んじゃないの?
0459デフォルトの名無しさん2015/09/23(水) 00:15:57.36ID:qfkgp73Y
バカに物事を理解させるのって本当に大変だね
教師には頭が下がるよ
俺にこんなバカで尊大な生徒が居たら無視していじめ問題とかになってるわ
0460デフォルトの名無しさん2015/09/23(水) 00:24:11.18ID:MwhyHk4V
>>458
それはその通り。
ただ、参照自体のサイズをユーザーが関知する必要がない。(ソースコードに現れない)
そこが決定的に違う。
だから、処理系が勝手に64bit参照にしていたとしても、同じソースコードがそのまま動くことになる。

ただ悪いが、この件に関して俺がいちいち回答する必要はマジでない。
俺が言っているのは本当に自明なことばかりであるし、君達も少し他言語をかじるだけで分かる話だ。
0461デフォルトの名無しさん2015/09/23(水) 00:28:22.82ID:nPFFi/Oi
ほうほう、C++だとポインターのサイズがソースコード上に現れて同じソースが使えないのですか
もちろんポインターのビットイメージを操作する場合を除いてですが
0462デフォルトの名無しさん2015/09/23(水) 00:33:24.68ID:qfkgp73Y
>>461
わざわざコードを書くときにポインタのサイズを意識して同じソースコードで動くように書かないんだろうよ
無能な働き者ってやつだ
0463デフォルトの名無しさん2015/09/23(水) 00:51:40.95ID:KSDSHGp7
staticの意味すら知らなかったんだからC/C++をろくに知らないんだろう。
JavaやC#ですら思い込みによる間違った認識に囚われていた。
ISO/IEC 14882:2014と言われてどのNxxxxかと尋ねるあたりは勘違いのしやすさを象徴していたな。
それでこの態度だから、まわりもろくに間違いを指摘してくれないんだろう。かわいそうに。
0464デフォルトの名無しさん2015/09/23(水) 00:52:34.21ID:MwhyHk4V
悪いがいちいち面倒なので、アホレスしたIDはそれ以降無視することにするよ。
とりあえず現在の無視対象は ID:nPFFi/Oi, ID:qfkgp73Y

マジでお前ら他言語触った方がいい。

そもそも他言語ではアドレス自体を取れないことが多い。
次に、取れたとしてもキャストできなかったりする。
だから、どうやっても sizeof(void*) 依存のコードを記述できない言語の方が多い。

C言語において無理なキャストをしなければ void* のサイズはコンパイラが自動的に判断して確保してくれる。
結果、32bitと64bitで同じコードが動く。
これはID:nPFFi/Oi, ID:qfkgp73Yみたいな馬鹿でも知っている、当たり前の話だ。

ただこれはユーザーがちゃんとそう記述したことを保証しなければならない。つまり、ユーザー依存だ。
上記のように、そもそもアドレスを取れない言語では、ユーザーがどうやっても sizeof(void*) 依存のコードを記述できない。
だからそもそも 32bit とか 64bit とか気にする必要もない。ここが決定的に違う。

何度も言うけど、お前ら本当に他言語を少しでも触った方がいい。
0465デフォルトの名無しさん2015/09/23(水) 00:58:25.97ID:nPFFi/Oi
そういやVisual Basic 6.0って文字列のアドレス取れたし
ビット数依存の糞コードが散乱していたな
0466デフォルトの名無しさん2015/09/23(水) 01:04:51.91ID:qfkgp73Y
>>463
思い込みの塊みたいなやつだから周りが指摘しても意味が無いんだろ
それはここで証明されてるじゃないか

指摘すると思い込み一つ増えたみたいだしね。
ここの住人が他の言語を触ったことがないって
0467デフォルトの名無しさん2015/09/23(水) 01:05:07.72ID:AnQ6XBDy
アドレスを扱えるのは機能性の一つであって欠点ではないよ?
0468デフォルトの名無しさん2015/09/23(水) 01:06:11.71ID:i5QbssGO
なんか時々現れるよな
新手のキチガイが
0469デフォルトの名無しさん2015/09/23(水) 01:08:10.92ID:qfkgp73Y
>>467
場合によっては欠点になるよ
上にも書いたけど無能な働き者によって他の環境で動かなくなる
0470デフォルトの名無しさん2015/09/23(水) 01:13:44.76ID:AnQ6XBDy
そりゃ書いたとおりにしか動かないでしょ。
0471デフォルトの名無しさん2015/09/23(水) 01:16:15.46ID:AnQ6XBDy
1+1を間違えて1+2と書く恐れがあるから+演算子を無くすべき!とか言ったって仕方ないよ。
0472デフォルトの名無しさん2015/09/23(水) 01:21:28.78ID:MwhyHk4V
>>467
もちろんその通り。
生ポインタを扱えることこそがCの最大の特徴であり、それをやらないのならCを使う意味はほぼ無い。

ただ生ポインタってのは実際は両刃の剣で、生ポインタさえなければ色々なことが単純になるんだよ。
そこは元のブログにも書かれているし、もっと他にも色々ある。
結果、Java作者はない方がいいと思ったから廃止したし、
C#作者は無いと困るがふんだんに使われても困るということで例外的使用に留めている。

ただまあ、本当にここら辺は一般論で、別に俺がわざわざここで言い直す必要もなく、
他でもさんざん言われていることだ。あのブログの中でも然り。
そしてそう思う奴も覆いから他言語も賑わっているわけで。

てゆうかもういいっすかね。特に俺である必要ないはずだし。
0473デフォルトの名無しさん2015/09/23(水) 01:23:01.21ID:0mJKXhs3
いや、皆がお前だけ消えてくれることをのぞんでるぞ
0474デフォルトの名無しさん2015/09/23(水) 01:23:53.95ID:v0Nc4YZQ
>>472
うん、もういいよ
お前の代わりは居ないけど要らないから
0475デフォルトの名無しさん2015/09/23(水) 01:28:45.41ID:AnQ6XBDy
今はどの環境でもリークをチェックできるし困ることは何もないけどなあ。
後始末の必要なリソースはメモリーに限らないので、メモリー管理によって鍛えられた
C++戦士は凄腕プログラマへの近道。
0476デフォルトの名無しさん2015/09/23(水) 01:31:43.38ID:nPFFi/Oi
>メモリー管理によって鍛えられた
>C++戦士は凄腕プログラマへの近道

もうC++を使わないで下さいね他人がきっと迷惑してます
0477デフォルトの名無しさん2015/09/23(水) 01:32:57.44ID:AnQ6XBDy
>>476
なるほど、キミはバトルプログラマーを知らないんだね?
0478デフォルトの名無しさん2015/09/23(水) 01:38:23.42ID:M/UFFhhb
最近はスキルが有効かどうかが環境より言語に左右されるような気がする。
0479デフォルトの名無しさん2015/09/23(水) 01:45:30.10ID:iC4K+Xaq
>>472
>結果、Java作者はない方がいいと思ったから廃止したし、
Java8で復活した部分がある,C++ では ->*, ::* で扱うポインタ
Java での呼び名:メソッド参照

http://peace.2ch.net/test/read.cgi/tech/1434079972/12
0480デフォルトの名無しさん2015/09/23(水) 01:49:55.57ID:nPFFi/Oi
危険を伴う有用な機能を具備することのリスクが
説明を受けても理解できない低能はどうしようもないな
だから>>479みたいなとんちんかんなレスをするんだろう
0481デフォルトの名無しさん2015/09/23(水) 01:55:54.98ID:IndlIx5T
散々論破されてるのに悪いと思わない時点でただのキチガイだろ
0482デフォルトの名無しさん2015/09/23(水) 01:58:32.17ID:AnQ6XBDy
はあ、また論破してしまった。
やはりC++は最強だな。
0483デフォルトの名無しさん2015/09/23(水) 02:02:23.55ID:IndlIx5T
>>464
>そもそも他言語ではアドレス自体を取れないことが多い。
>次に、取れたとしてもキャストできなかったりする。
>だから、どうやっても sizeof(void*) 依存のコードを記述できない言語の方が多い。
君の大好きなC#はポインタもsizeofも取れるよ
君は他言語を触る前にC#について勉強しなさい
0484デフォルトの名無しさん2015/09/23(水) 02:04:33.69ID:AnQ6XBDy
しかし今日の敵は弱かったな。
今までで最弱じゃないか?
0485デフォルトの名無しさん2015/09/23(水) 02:12:08.91ID:MwhyHk4V
>>479
これか?
http://qiita.com/pepepe/items/3d810e1bbed25768caa0
これは危険なタイプの生ポインタではないんだ。だから問題ない。
0486デフォルトの名無しさん2015/09/23(水) 02:12:34.07ID:qfkgp73Y
最初は32bit環境で4GB越えのバイナリを実行できる
CやC++は出来ない

だったはずなのに、指摘されても誤りを認めず最後の方には

参照が32bitであることを関知する必要がない

に変わってた。
0487デフォルトの名無しさん2015/09/23(水) 02:18:39.97ID:AnQ6XBDy
C/C++で出来ないことはレジスタをいじること。
他は何でもできるから。

わかったらもうケンカ売ってくるなよw
0488デフォルトの名無しさん2015/09/23(水) 02:51:39.64ID:iC4K+Xaq
キャリーフラグは触れてほしかったね‥
キャリーの読み込み,書き出しをしたいんだ
インラインだと後で最適化という介入があって心配だ
0489デフォルトの名無しさん2015/09/23(水) 05:09:46.93ID:DOrhv1Zg
>>448
> void*が32bit環境では4GBまでしか表せない。

この時点でなにもわかってないことがバレバレじゃん w
0490デフォルトの名無しさん2015/09/23(水) 05:12:56.52ID:sl1FEDPC
>>487
インラインアセンブラはダメか
0491デフォルトの名無しさん2015/09/23(水) 06:12:19.83ID:kDaXs3BE
メモリマップドレジスタみたいに環境によっては弄れるよね
0492デフォルトの名無しさん2015/09/23(水) 11:53:18.53ID:dAcDykGY
>>490
ありゃ規格の範囲外だからな。
gcc に慣れすぎて、他の使うとつらい。

>>491
I/Oレジスタじゃなくて、CPU のレジスタの話じゃないかな?
0493デフォルトの名無しさん2015/09/23(水) 13:59:22.37ID:DOrhv1Zg
>>491
レジスタは読むだけでフラグリセットしたり複数回読むと違う値になったりする奴があるから高級言語で読み書きするのはちょっと怖い

>>492
どこまでを CPU レジスタって言うかによる
0494デフォルトの名無しさん2015/09/23(水) 20:23:32.33ID:VRhTdQAB
メモリマップドI/Oではなく、
メモリマップドレジスタね
制御記憶が主記憶空間にマッピングされているという
0495デフォルトの名無しさん 転載ダメ©2ch.net2015/09/23(水) 20:32:04.80ID:1jqGrEyR
2Dゲーム当たり判定総合 [転載禁止]c2ch.net
http://peace.2ch.net/test/read.cgi/tech/1442990347/
0496デフォルトの名無しさん2015/09/23(水) 20:43:11.41ID:3ci5dXPK
0ページレジスタもね
0497片山博文MZ ◆T6xkBnTXz7B0 2015/09/23(水) 20:54:04.93ID:KfupEJ55
△ マップド
 マップト
0498デフォルトの名無しさん2015/09/23(水) 21:07:34.84ID:D/ibv0yF
クソコテは日本語もマトモに書けないのか
0499片山博文MZ ◆T6xkBnTXz7B0 2015/09/23(水) 21:15:35.76ID:KfupEJ55
>>498
添削の時間は限られている。まる、ばつ、さんかくだけで採点できる。
0500デフォルトの名無しさん2015/09/23(水) 22:20:05.97ID:lyPqrQHB
>>499
添削?採点?
突然何を言い出すのですか。頭は大丈夫ですか。
それにまるばつさんかく以外の記号が書かれているようです。
0501デフォルトの名無しさん2015/09/24(木) 01:42:54.13ID:/TjFSMYs
基地外が新たな基地外を呼び寄せるカオスなスレ
0502デフォルトの名無しさん2015/09/24(木) 22:11:32.00ID:O8aOI61G
初期化子でthisを渡すと警告が出ていたと思うんだけど、いつの日からか出なくなった。
どこかの時点で規格が変わったの?
0503デフォルトの名無しさん2015/09/24(木) 23:09:55.66ID:y5NlXAUf
>>502
普通のコンパイラーでは
警告と規格は関係ありません
0504デフォルトの名無しさん2015/09/25(金) 00:05:04.36ID:WA9ffgJV
もしかしてthisへの代入があった
ごく初期のC++のことか?
0505デフォルトの名無しさん2015/09/25(金) 01:39:59.76ID:hOC+hAXG
>>502
これ?
https://msdn.microsoft.com/en-us/library/3c594ae3.aspx
> 'this' : used in base member initializer list
...
> This warning is off by default. ...
0506デフォルトの名無しさん2015/09/25(金) 23:34:43.11ID:IdnO5CBH
STLのコンテナcで*(c.begin())とやるのとc.front()とやるのは何か違うの?
同じだとしたらどっちがどっちの糖衣構文?
0507デフォルトの名無しさん2015/09/25(金) 23:55:05.37ID:Ku6iuwWR
>>506
糖衣構文では無いよ。
先頭要素にアクセスすると言う目的に対して、同じ結果が得られる別の手段があったというだけの事。
より目的に合っているのは後者だと思うけど。
0508デフォルトの名無しさん2015/09/26(土) 00:00:24.18ID:9hL7F3GQ
かなり長いことC++触って無いけど
もうboostは、標準仕様になってるんですか?
まぁ、コンパイラによるから、何とも言えないかも
しれないけどさ
0509デフォルトの名無しさん2015/09/26(土) 00:06:37.49ID:cPpGYmLk
>>508
boostのどのライブラリ?
全てなら永遠にその時は来ないよ
0510デフォルトの名無しさん2015/09/26(土) 08:10:46.09ID:OajUOnCA
boostの社内における認識が、「誰が作ったか分からないハイリスクなライブラリ」から
「実績があり安心して使える準標準ライブラリ」になるのはいつですかね…
0511デフォルトの名無しさん2015/09/26(土) 08:23:46.53ID:ySVgmYih
boostに重大なバグがあって会社に損害を与えたとき誰も責任を取れないでしょ?
永遠にその時は来ないよ。
0512デフォルトの名無しさん2015/09/26(土) 09:17:56.96ID:teqXcjFQ
boostは、その全てが必ず標準化されるわけでは無いよ。
0513デフォルトの名無しさん2015/09/26(土) 09:21:36.35ID:T1LoOiMi
↑ごらんください! これがアスペです!!
0514デフォルトの名無しさん2015/09/26(土) 09:37:29.93ID:cPpGYmLk
>>511
OSS全く使えない会社か
勤めたくないね
0515デフォルトの名無しさん2015/09/26(土) 11:02:45.10ID:xWCYZ6+4
そういう会社はboostよりも先に自分が作り込んだ重大バグで潰れるから心配ない
0516デフォルトの名無しさん2015/09/26(土) 11:30:42.93ID:FH4mU5/4
そう言えば、バグがあった時直せないからって理由で、C++開発なのにC++標準ライブラリ禁止って職場があったわ
0517デフォルトの名無しさん2015/09/26(土) 12:50:25.19ID:9hL7F3GQ
>>516
スゴイ会社だな
会社で使ってるコンパイラが信用出来ないのか……
もしかしてVectorとかのSTLが禁止?
まぁ、VC++6.0ではVectorで醜いバグあったらしいが

って事は、コンパイラ作ってる様なもんだな
(コンパイラは言い過ぎかも知んないけど)
0518デフォルトの名無しさん2015/09/26(土) 13:00:09.30ID:FH4mU5/4
>>517
コンテナはOKだった
と、言ってもstring、vector、mapくらいしか使ってなかった気がする
algorithmは全面禁止だった
なので、ループ文とそのコピペの嵐で読むのも辛かったしバグも多かった記憶
0519デフォルトの名無しさん2015/09/26(土) 13:05:49.06ID:FH4mU5/4
書いてて思い出し笑いしちゃったよ
「バクがあった時直せない」って理由で標準ライブラリ使わずに、自作コードでバクだらけとか、草生えまくりだなwww
0520デフォルトの名無しさん2015/09/26(土) 13:19:28.92ID:uKQbY5Ux
A a = A();
ってやったとき
・単にaが構築される
・右辺が構築されてから左辺のコピー(ムーブ)コンストラクタが呼ばれる
・左辺と右辺がそれぞれ構築されてから左辺のコピー(ムーブ)代入演算子が呼ばれる
どれ?
デバッガで追ってみるとコピー(ムーブ)コンストラクタ/代入演算子は呼ばれてないから
・単にaが構築される
のはずなんだけど
コピー(ムーブ)コンストラクタ/代入演算子がないクラスでこれやると
なぜかエラーが出るんだよね
A &a = A();
ってやるとコンパイル通るけどMSVCの独自拡張みたい?
素直に
A a();
ってやればいいんだけど
A *a = new A();
ってやったときとシンタックスの一貫性がなくて微妙。
(常に 変数 = コンストラクタ の形にしたい)
あと関数宣言として解釈されることがあってイライラ。
標準規格とかでどう定義されているのかとか、説明できる方がいたら教えて下さい。
0521デフォルトの名無しさん2015/09/26(土) 13:34:13.70ID:GN/a0FjA
>コピー(ムーブ)コンストラクタ/代入演算子がないクラスでこれやると
>なぜかエラーが出るんだよね
マジ?
ここがおかしいような気がする
0522デフォルトの名無しさん2015/09/26(土) 13:34:31.65ID:8isGWqIv
普通にコピコンだろう
0523デフォルトの名無しさん2015/09/26(土) 13:37:52.70ID:xWCYZ6+4
コピペをしない自作なら、自分で理解できるだろう、直せるだろう。
なのかな?
そういえば、GCC使って開発してたとき、GPSに触れないよう
使うライブラリを全部自社開発したことはあったな
0524デフォルトの名無しさん2015/09/26(土) 14:33:54.80ID:NFyEOKoE
規格上はコピーコンストラクタが走るけど、
コピコンに副作用が無さそうと判断されたら、
最適化の際にただのコンストラクタによる構築に勝手に変更されている
と我が脳内コンパイラは申しております

実際のところどうなんだろう
0525デフォルトの名無しさん2015/09/26(土) 15:45:53.15ID:b1WQaLX+
設定ファイル(1行には設定項目名と値が1つずつ書いてある)を読み込んで、
設定項目ごとに対応する変数に値を格納する関数があります。
設定項目は200個くらいあって、それに応じてif文が200個くらいあります。
静的検査で、「循環的複雑度」とかいう指標が200とかになって、
これをもっと小さくしなければならないことになりました。(40以下くらい)
どういう風に作るのがスマートだと思いますか?
0526デフォルトの名無しさん2015/09/26(土) 15:50:09.12ID:snRIqmgr
そんな変な書き方は今すぐ止めればいいと思います

>A a();
>ってやればいいんだけど
>A *a = new A();
>ってやったときとシンタックスの一貫性がなくて微妙。

やってること、やりたいこと、が別なのに
一貫性を求める必要は無いと思います
タイプ量が増えるだけでしょう
0527デフォルトの名無しさん2015/09/26(土) 15:53:15.68ID:snRIqmgr
>>525
mapを使うか
もしくは設定項目文字列とenumのテーブルを用意して配列に突っ込む
0528デフォルトの名無しさん2015/09/26(土) 16:49:06.14ID:mVMjJSEh
>>520
>・単にaが構築される
>・右辺が構築されてから左辺のコピー(ムーブ)コンストラクタが呼ばれる

のいずれか。規格ではどちらも許される
ただし仮に後者を採用したとしてコンパイルエラーになるコードは
許されていない(コピーコンストラクターがprivateなど)
呼ばないことによる副作用の有無は関係無い
0529デフォルトの名無しさん2015/09/26(土) 18:22:01.93ID:9hL7F3GQ
C++でコード書くの嫌い
最適化云々で、クラスを.hで書いてメンバ関数は.cppに
書くべきだから、正直メンドクセ。
でもテンプレートはヘッダー内に全部書くべきだし……

全部volatileつければ、問題無いのか?
でも、それもメンドクセ。

最近はAndoroidアプリ作ってるから、クラス内に全部書けるけど
javaだから、unsignedがなんてcharだけなのか
そんで、オペレーター無いし
あと、いくらGCでも、「ちゃんとこっちで始末しますから」
って思ったりもする。
それと、C++みたいにprivateのラベルの様に
「こっからここまでprivate」みたいに………

愚痴は、いくらでも出るのに、ロクなコード書けない俺が
一番やっかい。
0530デフォルトの名無しさん2015/09/26(土) 19:00:14.27ID:1RpaQohZ
>>525
使えるのならリフレクション。
キーワードが共通の時にテーブルを書く手間をケチれる。
一応C++でもモドキがあるようだからいけるはず。
http://taichino.com/programming/1945
0531デフォルトの名無しさん2015/09/26(土) 23:32:48.30ID:5mMoR0BV
>>525
自分の上司に訊きなさい。
0532デフォルトの名無しさん2015/09/26(土) 23:47:31.13ID:G4HmjC7J
上司にきくことじゃないな
>>531みたいなバカは脳がスカスカなので
次にタイプする文字も上司に訊いてるんだろう
0533デフォルトの名無しさん2015/09/27(日) 00:28:15.57ID:Aie1F5/k
>>525
辞書(HashMap)、関数ポインタなどで、

vTableのように、文字列と処理を結びつける
0534デフォルトの名無しさん2015/09/27(日) 00:57:34.05ID:IK6WV2UC
関数内で関数の宣言したらコンパイル通って驚いた

void Func()
{
0535デフォルトの名無しさん2015/09/27(日) 00:58:05.23ID:IK6WV2UC
void A();
}
みたいな感じでね
0536デフォルトの名無しさん2015/09/27(日) 01:06:55.56ID:YOaTuDE7
>>520
A && a = A{};
これでOK
0537デフォルトの名無しさん2015/09/27(日) 01:21:55.60ID:7JlNsb+t
Cから受け継いだクソ仕様だな
0538デフォルトの名無しさん2015/09/27(日) 11:47:05.82ID:+LbsO3cu
>>537
どれがどういう理由で糞なの?
0539デフォルトの名無しさん2015/09/27(日) 12:26:51.51ID:Wa6E2D6E
>>489
やり方教えて
0540デフォルトの名無しさん2015/09/27(日) 13:53:17.26ID:0R68gjtE
>>534-536
こんなやり方あったんだ。便利そうだな
0541デフォルトの名無しさん2015/09/27(日) 14:37:12.97ID:hEAZFQJb
A && a = A{};

これマジで安全なの?
オブジェクトの寿命はどうなるの?
0542デフォルトの名無しさん2015/09/27(日) 15:00:57.98ID:zsE9aaJl
>>541
なにも問題ない
参照のスコープまで生き延びる
確か規格の8.5.3か12.2あたり
0543デフォルトの名無しさん2015/09/27(日) 15:13:07.68ID:zsE9aaJl
12.2一時オブジェクトの段落5か
The temporary to which the reference is bound or the temporary that is the complete object of a subobject to which the reference is bound persists for the lifetime of the reference except:

去年Visual C++は
Sub && s = Full{}.sub;
の寿命が延びないバグがあったのでバグ報告しといたけど、直ったようだ
0544デフォルトの名無しさん2015/09/27(日) 15:14:15.81ID:hEAZFQJb
aが右辺値参照なのはどうして?
右辺値参照と何の関連性が?
0545デフォルトの名無しさん2015/09/27(日) 15:15:29.74ID:zsE9aaJl
>>544
右辺値を受け取ってるんだから右辺値参照なのは当たり前だろう
0546デフォルトの名無しさん2015/09/27(日) 17:14:48.82ID:x2H664Vf
>>539
やり方?
何を指摘されてるかすらわかってないだろ w
0547デフォルトの名無しさん2015/09/27(日) 17:37:38.84ID:1KsOvSTX
>>546
自分は全くの通りすがりですよ。
わからないので聞いてるだけ。
0548デフォルトの名無しさん2015/09/27(日) 17:42:40.55ID:IjMgIUn3
>>544
const左辺値参照でもよいはず
0549デフォルトの名無しさん2015/09/27(日) 17:44:07.83ID:hEAZFQJb
ユーザーモードとカーネルモードがあるのに
そういうことに言及せずにざっくり4GB制限とか言ってるから
バカにされてるだけじゃね
0550デフォルトの名無しさん2015/09/27(日) 17:51:25.33ID:hvy9lckk
そういう話とはちょっと違うと思ったけど、どうなの?
0551デフォルトの名無しさん2015/09/27(日) 17:55:09.33ID:Tcvq0fDO
ID:hEAZFQJb が馬鹿な事は分かった。
ユーザーモードとカーネルモードで空間分離していれば3GBの制限も無いはずなんだが。
0552デフォルトの名無しさん2015/09/27(日) 18:05:02.17ID:hEAZFQJb
誰も別空間とは言っていないのだが
むしろ同じ空間を目分量で分離しているからこそ問題であり
メモリの上限の話をする上で
言及しないのはおかしいのではと言う話なのだが
0553デフォルトの名無しさん2015/09/27(日) 18:12:42.15ID:Tcvq0fDO
>>552
お前が賢いつもりなら、さっさと>>539に対して明確に回答すればいいだけ。
それも出来ないのに喚いているだけだから、お前は馬鹿なままなんだよ。
0554デフォルトの名無しさん2015/09/27(日) 18:13:02.34ID:Pogh5WEF
32bit環境でもポインタのサイズを64bitにしてハードウェアを活かさない実装にしてもC及びC++の規格上問題ない
0555デフォルトの名無しさん2015/09/27(日) 18:15:56.97ID:hEAZFQJb
いや別にそういう立場ではないんで
0556デフォルトの名無しさん2015/09/27(日) 18:20:03.99ID:Tcvq0fDO
ID:hEAZFQJb : カーネルモード知っている俺カッケー
ID:Pogh5WEF : 屁理屈言える俺カッケー

だからお前らは馬鹿なままなんだよ。
0557デフォルトの名無しさん2015/09/27(日) 18:22:11.81ID:Pogh5WEF
>>556
屁理屈もなにも一番元の話がそれなんだけど
0558デフォルトの名無しさん2015/09/27(日) 18:26:28.84ID:IjMgIUn3
sizeof(void *)の話とカーネルモードは本質的に無関係
無理やりこじつける実装も存在するというだけ

そもそも命令デコーダとアドレスデコーダは別物
0559デフォルトの名無しさん2015/09/27(日) 19:00:43.12ID:nW+23lOG
C++インタプリタがあるんだから
何Gあろうが関係なくね
0560デフォルトの名無しさん2015/09/27(日) 19:51:34.01ID:YOaTuDE7
もはや何を言い争っているのかわからん
0561デフォルトの名無しさん2015/09/27(日) 19:53:58.16ID:1KsOvSTX
全然教えてくれないんじゃん
0562デフォルトの名無しさん2015/09/27(日) 20:28:04.86ID:Af4kFVrx
元はJava,C#空想実装と現実のC,C++実装を比較するのはおかしいという話
空想実装でよければC,C++だってそんな制限はないと言ってるだけ
文脈嫁
0563デフォルトの名無しさん2015/09/27(日) 21:41:42.41ID:VW7AXb3O
だけ
0564デフォルトの名無しさん2015/09/27(日) 21:49:51.60ID:KfU5Es7n
空想実装と現実の実装の違いについては
JavaとCで違いがあるのか?
どちらも現実はビット数の制限受けてるだろ
0565デフォルトの名無しさん2015/09/27(日) 22:48:35.59ID:Tcvq0fDO
>>561
そりゃまともな奴なら出来ないって言うからね。回答しようがない。
ここで引っかかっている馬鹿はその程度でしかない。
こいつらはCスゲーしか認めないようだが、そういう問題ではないんだがな。
0566デフォルトの名無しさん2015/09/28(月) 01:23:45.19ID:8FV3B/V7
いいんだよ
各自好きな事言っとけ
ここは落書き
0567デフォルトの名無しさん2015/09/28(月) 06:44:48.23ID:Rj5Nu0nM
>>565
>>546

バカがアホに諭すとか滑稽すぎ w
0568デフォルトの名無しさん2015/09/28(月) 07:05:49.65ID:oN5IJNc7
もはやなんのスレか分からない
0569デフォルトの名無しさん2015/09/28(月) 11:08:56.51ID:BV7UhKgt
C++のコードで参照渡しをやたらと多用する人がいますが、意図がよくわかりません。
ポインタの代替として使われているのでしょうか?

int hoge(Foo &foo);

再代入を行わない場合、普通にポインタ渡しでも意味は変わらない気がするのですが。
開発上の利便性を考えてのことなのでしょうか。
個人的な考察として、以下の可能性を想定しています。

1. "->"による値参照が嫌で、"."を用いたい。そのために参照渡しを多用している
2. オブジェクトの状態変化の可能性を示唆させるために参照渡しとポインタ渡しを使い分けている
0570デフォルトの名無しさん2015/09/28(月) 11:21:34.67ID:VY24hflb
A a;
hoge(&a);
が面倒ってだけ

てか、C++ならスマートポインタ使え
0571デフォルトの名無しさん2015/09/28(月) 11:21:55.29ID:3TMmR4lP
>>569
2の意味がわからんけど場合によってポインタで渡すより幾つか利点ある
null参照を渡せない
参照先を関数内で変更出来ない(ポインタでもconst付けりゃ出来なくする事出来るけど)

あと普通にポインタ渡しとか参照渡しを多用とか言ってるけど参照渡しは普通だから
むしろnullpointer渡すことが出来る時か文字列リテラル渡すときぐらいしかポインタ渡しは使わない
0572デフォルトの名無しさん2015/09/28(月) 11:26:57.20ID:DQYQoyfG
ポインター版の関数とポインターじゃない版の同じ関数を2回書かなくていいという意味もある
0573デフォルトの名無しさん2015/09/28(月) 12:49:29.07ID:4w+sdak1
特別必要がない限りポインタ渡しなんてヤメレ
0574デフォルトの名無しさん2015/09/28(月) 13:35:58.94ID:BV7UhKgt
レスありがとうございます。
C++の世界では参照渡しがデフォと考えた方が良さそうですね。

C++は他人のコードを眺める程度なのですが、
同じような用途なのに人によって参照渡しで統一している人やポインタ渡しで統一している人がいて不思議に思っていました。
0575デフォルトの名無しさん2015/09/28(月) 13:47:22.82ID:iX8okw0+
メンバ変数を引数として渡す関数の場合、参照は使いにくい
0576デフォルトの名無しさん2015/09/28(月) 14:26:10.97ID:wVFkh7Dk
>>574
はい、その通りです。
C++はポインタとプリプロセッサマクロの撲滅を目標の一つとして開発されています。
そのためC++ではポインタよりも参照が推奨されています。

C++であってもポインタを多用する人はいますが、
その人の勉強不足でCのポインタを引きずっているとも言えますし
C++の参照がポインタからの全面移行を促すだけの魅力が無いとも言えます

C形式のポインタを捨ててもらえるよう、C++は永遠に進化中です。
0577デフォルトの名無しさん2015/09/28(月) 17:34:31.23ID:rUo6g3/R
例えば関数の引数なんかでオプション的な引数がある場合
(その引数があってもなくても関数が動作するような場合
例えばログ出力先の指定など)
ポインタだと楽なんだけどね
void runSomething(const std::string* log)
{
// log = 0なら何も出力しない
}
これってなんか横着せずに参照でやるべきなんだろうか
0578デフォルトの名無しさん2015/09/28(月) 17:35:18.80ID:rUo6g3/R
上記constはおかしいな
0579デフォルトの名無しさん2015/09/28(月) 18:47:53.83ID:wVFkh7Dk
>>577
俺ならデフォルト引数か関数オーバーライド使うかな?

参照はデフォルト引数出来たっけ?
ダメなら関数オーバーライドで。

String位ならデフォルト付き値渡し引数にconst付けてコンパイラさんお願いっ!てしちゃうかも
0580デフォルトの名無しさん2015/09/28(月) 18:53:56.76ID:VY24hflb
オーバーライドじゃなくてオーバーロードやろ?
0581デフォルトの名無しさん2015/09/28(月) 18:58:09.96ID:XXoDc2O6
>>577
ところでこの例の場合引数が省略された時に0が渡されるのは保証されてたっけ?
0582デフォルトの名無しさん2015/09/28(月) 19:05:58.93ID:4w+sdak1
577の引数が省略されたらコンパイルエラーになることが保証されてるよw
NULLを渡されたら特別な処理をしたいならポインタ使ってもいいんじゃないか
俺ならそういう設計は可能な限り避けるけどな
0583デフォルトの名無しさん2015/09/28(月) 19:07:49.95ID:P8/hbuJG
>>581
この例のままだと引数の省略は出来ない

void a(const std::string *s = 0);
とするか、意味は少し変わるが
void a(const std::string& s=std::string());
としてempty()の場合無しとして扱うか
俺は後者をよく使う
0584デフォルトの名無しさん2015/09/28(月) 20:02:10.71ID:91/ACm3S
>>575
ん?
なんか面倒なことあったっけ?
0585デフォルトの名無しさん2015/09/28(月) 20:07:14.94ID:91/ACm3S
>>582
> 577の引数が省略されたらコンパイルエラーになることが保証されてる

そんな保証あったっけ?
0586デフォルトの名無しさん2015/09/28(月) 20:34:23.74ID:tAj/1R7q
もちろんです
0587デフォルトの名無しさん2015/09/28(月) 22:21:10.12ID:qXJ0fmsD
>>570
何でもかんでもスマポにすればいいと言うわけではない
スコットメイヤー先生の糞本でも読んで出直せ
0588デフォルトの名無しさん2015/09/28(月) 22:23:31.06ID:1BrOiTcA
うっせーハゲ
0589デフォルトの名無しさん2015/09/28(月) 22:30:32.73ID:AY6OxaHG
>>583
>void a(const std::string& s=std::string());
void a(const srd::string& s = ""));
でええやろ
0590デフォルトの名無しさん2015/09/28(月) 22:33:11.06ID:mUEYl4pK
スマートポインタってオーバーヘッドでかいでしょ
一度に大量の解放が起こると性能ガタ落ちだし
速度を追求するためにC++使ってるのに、本末転倒
0591デフォルトの名無しさん2015/09/28(月) 22:35:19.98ID:1BrOiTcA
unique_ptrならいいだろ
0592デフォルトの名無しさん2015/09/28(月) 22:38:52.17ID:tAj/1R7q
>>589
お前はいいかも知れないが
許容出来ない人も居るだろう

>>590
スマポのオーバーヘッドはアセンブリレベルで
マナポと完全に同一にまで改善されたというのが
ハーブサッターとスコットメイヤー教祖の教えなのだが
ただしunique_ptr<T>に限る
0593デフォルトの名無しさん2015/09/28(月) 22:39:23.89ID:ynPwQZO2
つか、uniqlo_ptrしか使わんな
0594デフォルトの名無しさん2015/09/28(月) 22:40:52.11ID:ynPwQZO2
///
unique_ptrだ
予測変換入ってもた
0595デフォルトの名無しさん2015/09/28(月) 22:54:34.42ID:FIIzSoGf
つかstd::unique_ptrの構文が参照ではなくてポインタのそれである件について:

やっぱC++においては参照の方がおまけ概念
const T&以外の参照渡しは禁止
0596デフォルトの名無しさん2015/09/28(月) 22:55:27.14ID:0rYiKgaG
>>583
>void a(const std::string& s=std::string());
>としてempty()の場合無しとして扱うか

おお、これでちゃんと動いた!
大抵はこれでどうにかできそう
良いこと聞いた

空文字列と文字列が無いことを区別して取り扱いたい時が稀に良くあるが
仕様変更できる場合が大半だな
文字列以外ではあまりないし
0597デフォルトの名無しさん2015/09/28(月) 22:57:51.67ID:mUEYl4pK
>>592
いやでも、shared_ptrは遅いんでしょ?
unique_ptrが使える場面なんて限られてるし、片手落ちかと
だいたい、新技術を導入するか否かの決定権を持っている上の人たちは
長年生ポインタのやり方で染み付いている訳で、
便利だから乗り換えましょう、とはそうそういかないかと
0598デフォルトの名無しさん2015/09/28(月) 22:57:53.72ID:0rYiKgaG
>>595
生ぽさえ撲滅出来ればそれでいいんじゃよ
0599デフォルトの名無しさん2015/09/28(月) 23:01:49.61ID:1BrOiTcA
むしろshared_ptrのほうが使える場面が限られてる
遅いといってもshared_ptrのコストが問題になる場面なんてめったにないだろう
0600デフォルトの名無しさん2015/09/28(月) 23:04:24.66ID:tAj/1R7q
ナマポをスマポに書き換えるときに
unique_ptrじゃなくてshared_ptrしかダメ
というのは作りが相当おかしい
0601デフォルトの名無しさん2015/09/28(月) 23:20:39.17ID:XXoDc2O6
>>597
うちはナマポ使ってると、レビュー時にその必要性について議論させてるぞ

Cできちんとポインタを使いこなしていた人ほど
すぐにC++ではナマポ不使用派に転向しちゃう

基本、実績のある古いコードをそのまま持ってきた場合とシステムコールとかのC形式ライブラリ呼ぶところ位しかナマポは残らないな


shared _ptrが遅いというのは、ナマポで安全対策を入れていない場合と比べてだ
ナマポに安全対策を入れたら大抵はshared_ptrより遅くなるぞ

ナマポの方が速いと主張する人たちは
レビューとプロファイラーの前で生き残れなかった

ま、うちだけかもしれんが
0602デフォルトの名無しさん2015/09/28(月) 23:24:13.61ID:XXoDc2O6
でもC++のスマポは記述が冗長なのが好きになれない

ナマポはレビュー時に見落とすくらいシンプルなのにね
0603デフォルトの名無しさん2015/09/28(月) 23:36:28.90ID:FF3rjUqv
動的記憶が前提だからね
あくまで用途はその範疇で
0604デフォルトの名無しさん2015/09/28(月) 23:38:37.64ID:FIIzSoGf
いくらスマポが良いといっても
やめて!メモリの動的確保する気でしょう?
エロ同人みたいに
0605デフォルトの名無しさん2015/09/28(月) 23:45:35.35ID:0rYiKgaG
う、、、ネタがわからん
0606デフォルトの名無しさん2015/09/28(月) 23:55:41.35ID:0rYiKgaG
実際、スマポも生ぽもほとんど使わないな

メモリ操作はSTLのコンテナとイテレータにお願いしちゃうし

ポインタ渡しは参照使うし

型変換とかも名前付きキャストとunionでどうにかなるし
0607デフォルトの名無しさん2015/09/29(火) 00:42:40.24ID:0lZfHTgJ
まあポインタでも参照でも好きなもんを使えばいいよ。プログラムなんて動けばいいのさ。
0608デフォルトの名無しさん2015/09/29(火) 01:17:31.36ID:HqSuUkpS
こまけぇこたぁ
    いいんだよ!!
  /)
 // /)
`///  __
|イ二つ/⌒⌒\
| 二⊃ (●) (●) \
/  ノ/⌒(_人_)⌒  \
\_/|  |┬|   |
 / \  `ー′  /
0609デフォルトの名無しさん2015/09/29(火) 02:44:20.18ID:NXR0Nytt
よくねえよヴォケ
0610デフォルトの名無しさん2015/09/29(火) 07:18:55.18ID:UCFlulCD
ナマポの利点ってなんなの
0611デフォルトの名無しさん2015/09/29(火) 08:27:03.26ID:4NffsMzC
働かなくても生活出来ること
0612デフォルトの名無しさん2015/09/29(火) 08:30:36.21ID:Y2fWXifr
>>571
>参照先を関数内で変更出来ない
意味がわからない
http://codepad.org/mXQd0mNP
参照であっても参照先を関数内で変更できるようだが
0613デフォルトの名無しさん2015/09/29(火) 08:42:57.14ID:Y2fWXifr
>>576
STLのイテレータをみていると、これはポインタと同じ使い方
本当にポインタを撲滅する気があるようにはみえない
http://codepad.org/gQY11puS
0614デフォルトの名無しさん2015/09/29(火) 08:46:58.42ID:GdgkSls5
>>612
参照が示す場所と言えば良かったかな?
参照先の値を変更出来るのは当たり前だからわざわざコード書かなくてもいいよ
0615デフォルトの名無しさん2015/09/29(火) 09:18:41.17ID:kfE15Zdi
C++になっても生ポインタを結局ばりばりに
使うのだよな・・・みんな。
0616デフォルトの名無しさん2015/09/29(火) 09:38:09.16ID:bCmPOTpj
>>613
それはナマポ派のひとを取り込むためにわざと記法を似せてるんじゃないかな?
0617デフォルトの名無しさん2015/09/29(火) 09:42:32.67ID:2BMWd/g5
どうしてもイヤならC++なんか手を引くべき
0618デフォルトの名無しさん2015/09/29(火) 09:43:37.29ID:bCmPOTpj
>>614
よく分からんがポインタのアドレス値そのものを書き換えるってこと??

もらったポインタをfor文の中でインクリメントしてデータアクセスする以外の用途が思いつかないな

上記の用法ならイテレータの参照を渡すかのが普通だからわざわざポインタ使うほどのものでもないし
0619デフォルトの名無しさん2015/09/29(火) 09:46:03.17ID:bCmPOTpj
>>615
それがC++の良いところでもあり悪いところでもある
清濁併せて飲み込んじゃう混沌さがC++らしさ
0620デフォルトの名無しさん2015/09/29(火) 09:51:42.83ID:GdgkSls5
>>618
> よく分からんがポインタのアドレス値そのものを書き換えるってこと??

そう
変更出来ない事を(細かい事だが)メリットとして挙げてる
ポインタもconst付ければ変更出来ないけど面倒くさいからな
0621デフォルトの名無しさん2015/09/29(火) 11:25:09.86ID:NXR0Nytt
標準アルゴリズムはナマポ前提でそ
ナマポとイテレータを透過的に置き換えられるってだけで
ナマポ撲滅を主張するような作りにはなってない
0622デフォルトの名無しさん2015/09/29(火) 11:39:27.99ID:9FBYnxt5
ポインタを使うて事にそんなにアレルギーがある人がいるんだ…
コードを全部配列で書いてもアレルギーでるの?
0623デフォルトの名無しさん2015/09/29(火) 11:49:34.30ID:Fziu4eIr
>>622
Cかよと面倒臭い気持ちにはなる
んで、しぶしぶtraitsを書こうと思って、c++ array specializeでググる
0624デフォルトの名無しさん2015/09/29(火) 12:13:37.73ID:XovM8eOK
生ポがわいてんのか
0625デフォルトの名無しさん2015/09/29(火) 12:35:12.59ID:Y2fWXifr
>>614
ますます意味がわからない

>>571
>参照先を関数内で変更出来ない

できちゃってるよ‥
http://codepad.org/6rGzlzmc
参照を使っても呼び出し元に影響を与えないわけではないのだが、どういうメリットを強調したかったの?
0626デフォルトの名無しさん2015/09/29(火) 12:37:23.78ID:bCmPOTpj
>>620
あ、了解。やっとわかった。

ポインタのメリットとして書き換え可能をあげてるのかと勘違いしてた

参照のメリットとしてアドレス値(?)が書き換わる可能性が無いと言うことね
0627デフォルトの名無しさん2015/09/29(火) 17:06:50.42ID:0lZfHTgJ
参照はだいたい理解したんだが
&& と言うのだけが理解出来ないよ。
0628デフォルトの名無しさん2015/09/29(火) 19:52:43.47ID:NXR0Nytt
テンポラリへの参照
0629デフォルトの名無しさん2015/09/29(火) 20:32:38.62ID:rSzsIUwL
new, deleteを生で書かないという前提なら生ポでいいじゃん
0630デフォルトの名無しさん2015/09/29(火) 20:37:38.49ID:XSRpVFiu
>>627
右辺値への参照です
 int a=0;
 int & lr = a; //左辺値参照
 int & rr = 0; // 右辺値参照

 void f(int &); void f(int &&); //両方のオーバーロード
 f( a ); // f(int &)
 f( 0 ); // f(int &&)

 int g();
 int && rr2 = g(); //g()呼び出し結果は右辺値
0631デフォルトの名無しさん2015/09/29(火) 20:38:39.97ID:XSRpVFiu
失礼
int && rr = 0; // 右辺値参照
だった
0632デフォルトの名無しさん2015/09/29(火) 20:42:24.19ID:XSRpVFiu
class A {
 void f() &;
 void f() &&;
}

A a;
a.f();//f()&
(new A())->f(); // f()&&
0633デフォルトの名無しさん2015/09/29(火) 20:59:50.06ID:UeLWTQcw
shared_ptrが遅いって言ってるやつはどの操作にとんなコストがかかるか理解して言ってるんだろうか
0634デフォルトの名無しさん2015/09/29(火) 21:05:55.31ID:Z5H58J48
shared_ptrを使ってみて遅いと評価することと
どの操作にとんなコストがかかるか理解
することにどのような因果関係があるのでしょう
0635デフォルトの名無しさん2015/09/29(火) 21:09:20.14ID:VAPx39zG
まあ、実際sharedは遅いよ。
それでも多言語のGCやらに比べればマシだけど。
要は機能豊富過ぎるんだよね。

殆どの用途にはuniqueで十分
0636デフォルトの名無しさん2015/09/29(火) 22:00:15.35ID:UeLWTQcw
どの操作にどんなコストが掛かるのか知らないと効率的な利用が出来ないだろ
0637デフォルトの名無しさん2015/09/29(火) 22:06:58.07ID:xQzivTWI
shared_ptrの効率的な利用のためにshared_ptrの仕組みを理解することと
shared_ptrをナマポの代替で使ってみて遅いケースがあると判断することに
何の関係が
0638デフォルトの名無しさん2015/09/29(火) 22:13:09.38ID:VAPx39zG
実装の詳細は知らんけど
ナマポと比較して
shared_ptr1つ目生成時中間バッファ作成コスト、コピー作成時とコピー削除時に同期コスト、weakも入れた最後の削除時に中間バッファ削除コスト、
デリファレンス時ノーコスト

ってな感じじゃね。
0639デフォルトの名無しさん2015/09/29(火) 22:13:19.41ID:diX6sJrx
(new A())->f() は f() && でなくf() & が呼ばれる
*(new A()) が左辺値だから
0640デフォルトの名無しさん2015/09/29(火) 22:31:50.55ID:mPnf6nOs
>>636
こないだstd::mapのstd::setを使ったらスゲー請求書が来てびっくりした
0641デフォルトの名無しさん2015/09/29(火) 22:46:20.57ID:diX6sJrx
そういやshared_ptrのカスタムデリーターってtype erasureしてる?
制御情報と別にさらに動的領域が必要になりそうな
0642デフォルトの名無しさん2015/09/29(火) 23:01:51.29ID:NXR0Nytt
>>639
だよな、俺も変だと思った
ビルトイン演算子の単項 * は常に左辺値を生じるわけで
0643デフォルトの名無しさん2015/09/29(火) 23:17:58.28ID:H886HULU
shared_ptr使ったらいつのまにかuse_countが万単位になっててビビった

>>635みたいなバカは実測もしないでshared_ptrがGCより速いと勘違いしてんだろw
0644デフォルトの名無しさん2015/09/29(火) 23:18:59.34ID:OUPKSVtA
万の共有してるお前がバカなだけ
0645デフォルトの名無しさん2015/09/29(火) 23:27:46.40ID:mPnf6nOs
やっぱスコープを超えて生きつづけるような動的メモリ確保は悪
個数に上限がない上に、ソースコードの検索で実体を特定できない分グローバル変数より性質が悪い

1スコープ1画面すなわち25行未満とするの正義
0646デフォルトの名無しさん2015/09/29(火) 23:35:18.44ID:LyudXVtb
2015年に於いて一画面が25行の環境の>>645は
ムーブセマンティクス全否定だそうです
0647デフォルトの名無しさん2015/09/29(火) 23:42:59.40ID:mPnf6nOs
動的メモリ確保を必要以上に有りがたがって多用する奴は
グローバル変数を多用するビギナー未満の存在、

チューリングマシンあたりからやり直せ
0648デフォルトの名無しさん2015/09/29(火) 23:56:13.74ID:VAPx39zG
そりゃ実行時のデータで必要なオブジェクトの数や種類が変わらないなら必要は無いのだろうが。
0649デフォルトの名無しさん2015/09/30(水) 00:49:17.79ID:k73k1QZf
>>638
make_shared使ったら中間バッファ作成コストは無くなる
その代わりweak_ptrを使った場合それが残ってる間も解放されない


あと、shared_ptrのコピー速度が問題になる程コピーするか?
そんな設計だと生ポインタだったら所有権の管理出来ないと思うんだが

>>643
糞実装というのは置いといてもshared_ptrの速度と何の関係が?
gcのある環境だと数万も参照持つ程長い間生きてるといざ解放するときstop the worldになる糞コスト高い世代のgcになるだろうけどな
0650デフォルトの名無しさん2015/09/30(水) 01:08:31.92ID:YymjgiCr
GCとshared_ptrの速度を比較する馬鹿がいると聞いてきました。
しかもネタじゃなくて本気で書き込んでるらしいと聞きました。
0651デフォルトの名無しさん2015/09/30(水) 01:44:40.15ID:wkMyE1bD
どっちが速いかって問題じゃないから
ここが通じないやつと話しても不毛なだけだよ
0652デフォルトの名無しさん2015/09/30(水) 07:07:44.73ID:L4DkDpWh
>>630
分からん。
そもそも右辺値参照する理由は何ですの?
0653デフォルトの名無しさん2015/09/30(水) 08:23:18.30ID:FCo7WZBm
>>652
ま、もったいないお化けの呪いです。
0654デフォルトの名無しさん2015/09/30(水) 11:52:14.07ID:Q1Di+uY9
関数の戻り値を変数に受けずに直接ゴニョゴニョするときに有益
0655デフォルトの名無しさん2015/09/30(水) 12:49:31.47ID:4JsedgFo
>>652
右辺値参照はパフォーマンス向上のために導入されたもので、参照先は、以後のスコープで使われる機会のない(デストラクトを待つだけの)一時オブジェクトと見なされる。

実際に使われる機会のないことはプログラマーが保証する
0656デフォルトの名無しさん2015/09/30(水) 13:08:20.36ID:vdDHGEBP
>>652
右辺値参照が導入された第一の理由はmoveセマンティクスを実現するため
0657デフォルトの名無しさん2015/09/30(水) 13:16:43.24ID:L4DkDpWh
分からん。c++以外の言語で右辺値参照と言う機構は有るんでっか?
もしc++固有の機構なら何でc++だけそんなもん導入する必要があるのですかい?
0658デフォルトの名無しさん2015/09/30(水) 13:39:20.73ID:VnaX2NHk
C++はスタックにオブジェクトを確保するから
0659デフォルトの名無しさん2015/09/30(水) 13:45:19.98ID:VnaX2NHk
いや、もちろんヒープに確保する事もできるんだけどGCが無いから
0660デフォルトの名無しさん2015/09/30(水) 13:55:13.48ID:XhnAqUEm
unique_ptrのmoveコンストラクタの存在とコピーコンストラクタがないことでどういう効果があるか考えれば分かると思う。
0661デフォルトの名無しさん2015/09/30(水) 14:19:24.56ID:7iKwfO2h
>>657
俺様的個人見解では
コピーでなくムーブで済ませるのは本来ならコンパイラやインタプリタの最適化ルーチンのお仕事

それを言語仕様上「いいか、絶対にコピーするなよ、絶対にだぞ!」
と明記することが出来るようにしたのが右辺値参照


ムーブできなくてコピーが発生するくらいならコンパイルエラーにしてくれ
俺(プログラマ)がムーブ出来るように手順を考え直すから
と言うことを&&でコンパイラさんに伝えてる

他の言語は「こまけーことはいいんだよ!」でできています。
0662デフォルトの名無しさん2015/09/30(水) 14:28:06.26ID:vdDHGEBP
>>657
C++は他の高級言語と比べて高パフォーマンスであることを特に重要としてるから
プログラマの工夫で高速化できる機能が備わってる
0663デフォルトの名無しさん2015/09/30(水) 14:49:50.37ID:R06l1h0q
C++以外はすべて糞言語だから右辺値参照が無い。
0664デフォルトの名無しさん2015/09/30(水) 21:51:39.92ID:L4DkDpWh
>>661
うーん、まだ分からん。
0665デフォルトの名無しさん2015/09/30(水) 21:58:53.58ID:lnfdPqWh
コピーよりスワップのほうが早い場合があるだろ
0666デフォルトの名無しさん2015/09/30(水) 22:00:11.74ID:VnaX2NHk
http://srad.jp/~taro-nishino/journal/507551/
これ読んで分らなかったらあきらめな
0667デフォルトの名無しさん2015/09/30(水) 22:01:27.44ID:k73k1QZf
>>664
存在する理由が解らなければ使わなければいいよ
標準ライブラリを使ってるだけで割と恩恵受けてるから
0668デフォルトの名無しさん2015/09/30(水) 22:16:34.76ID:L4DkDpWh
>>666
読んでいる途中で諦めた。明日再挑戦するわ…
0669デフォルトの名無しさん2015/09/30(水) 22:19:44.01ID:VnaX2NHk
こんなやつ・・・
0670デフォルトの名無しさん2015/09/30(水) 22:34:51.73ID:IxoD0KLd
>>666
『名前を持たないなら、それは右辺値"なのである』
その理屈で行くと*(new int)が右辺値になってしまうな
0671デフォルトの名無しさん2015/09/30(水) 23:35:15.70ID:aEcL3JaV
http://peace.2ch.net/test/read.cgi/internet/1401535906/107
  ↑ ↑ ↑ ↑ ↑ ↑ 
0672デフォルトの名無しさん2015/10/01(木) 00:18:26.56ID:MrcZAfOx
メンバ変数とメンバ関数の定義ってどういう順序で書くのが一般的なの?

【VC++方式】
publicメンバ関数
privateメンバ関数
publicメンバ変数
privateメンバ変数

【Google方式】
publicメンバ関数
publicメンバ変数
privateメンバ関数
privateメンバ変数


貴様らはどっちを使ってるの?
0673デフォルトの名無しさん2015/10/01(木) 00:23:26.58ID:W6dzHXP5
全部パブリックだし無駄なアクセサとか作らない性質なんで関係無いですね
0674デフォルトの名無しさん2015/10/01(木) 00:26:52.37ID:yE0+l/d1
統一されてりゃいい
0675デフォルトの名無しさん2015/10/01(木) 00:28:09.19ID:0eXwX1cj
変数は全部上に持ってってる。
何で下に配置しようとするのか理解できない。
0676デフォルトの名無しさん2015/10/01(木) 00:34:01.87ID:e+Nqpsc9
クラスを利用するときは変数なんて見ないだろう
0677デフォルトの名無しさん2015/10/01(木) 00:43:09.13ID:j4gRyYlh
変数が上だな
つーかデフォルトprivateなのだから
そこから書くのが自然な気がする。
0678デフォルトの名無しさん2015/10/01(木) 00:43:40.25ID:P62utjXs
何で上に持っていくのか理解できない
0679デフォルトの名無しさん2015/10/01(木) 00:46:42.51ID:KtuKSkrc
ヘッダファイルが誰のためにあるのか考えろや
0680デフォルトの名無しさん2015/10/01(木) 00:47:30.33ID:W6dzHXP5
これはね、
内部仕様を大事にする東洋哲学と
外部仕様を大事にする西洋哲学の
違いですね
0681デフォルトの名無しさん2015/10/01(木) 01:06:55.36ID:W4wdkuI5
>>635>>640の話をよくよく聞いてみたところ、彼ら、ソートを再帰で作ってたらしいです。
引数としてstd::shared_ptrを渡していたのでコピーコストが凄いことになっていたようです。
ソースを戴いたのでループに修正してあげたところ、かなり驚いた様子で改心していました。
0682デフォルトの名無しさん2015/10/01(木) 01:17:32.02ID:aA9UfTOs
>>681
shared_ptrを引数として渡すならconst参照でいい
0683デフォルトの名無しさん2015/10/01(木) 02:12:38.73ID:W4wdkuI5
>>682

>>635の人ですか。
また何か疑問がわきましたか?
0684デフォルトの名無しさん2015/10/01(木) 02:32:50.77ID:aA9UfTOs
>>683
ちげえよ

引数でshared_ptrを渡すならコピー渡しじゃなくて
const std::shared_ptr<T>& p
にしろ
その関数内で所有権が欲しいならその時にコピーしろ
0685デフォルトの名無しさん2015/10/01(木) 02:52:40.21ID:aA9UfTOs
何でソートをオレオレ実装してんだstd::sort使えよとか他にも突っ込み所あるけどね
0686デフォルトの名無しさん2015/10/01(木) 08:01:51.69ID:ZyUEx0el
つーかキチンと所有権管理の意識をしていたら、わざわざsharedを使う場面が殆ど無いことに気づくはず。
0687デフォルトの名無しさん2015/10/01(木) 09:58:06.89ID:LB18ex5+
std::sortはpredを値渡しだが、少し複雑なpredのメンバにshared_ptrを持たせたことがあった。それが正しい判断だったのか余計な心配だったのか不明。
0688デフォルトの名無しさん2015/10/01(木) 15:43:10.33ID:mZxAmtu3
http://faithandbrave.hateblo.jp/entry/20121116/1353047948
boost::threadのスタックサイズはthread::attributes::set_stack_sizeで設定できるようですが
std::threadではどのようにして設定するのでしょうか?
0689デフォルトの名無しさん2015/10/01(木) 16:41:46.71ID:lsGbndod
You can't.
0690デフォルトの名無しさん2015/10/01(木) 19:19:35.56ID:BUCLrkun
Oh,no.
0691デフォルトの名無しさん2015/10/01(木) 20:12:32.90ID:LB/4icN7
C++のクラスとか実は構造体なのだからデータ1stに決まってるだろ;
メンバ関数から書く奴は頭おかしい(もしくはclassとstructの明示的使い分けを説明できねばならない

まあ一応概念上は「手続きに与えるデータ」の側面(手続きがメイン)を強調したいときがstructで
それ以外はclassではある
0692デフォルトの名無しさん2015/10/01(木) 21:11:20.09ID:P62utjXs
>>691
関係ない
0693デフォルトの名無しさん2015/10/01(木) 21:21:12.13ID:WeiZCb/T
>>691
>もしくはclassとstructの明示的使い分けを説明できねばならない
互換性以外でstruct意味あるの?
自分のコードでは使おうと思ったことない
0694デフォルトの名無しさん2015/10/01(木) 21:31:33.68ID:QENZiec8
使い分けなんか決まりが有るわけでもないし適当でいい。
それより「クラスとか実は構造体」なんてアホなこと言ってる奴は
早く病院行った方がいい
0695デフォルトの名無しさん2015/10/01(木) 21:35:17.70ID:BUCLrkun
構造体をクラスで特殊化しようとしたら出来なかったから同じではないみたい
0696デフォルトの名無しさん2015/10/01(木) 21:39:07.38ID:BshYJ+by
TMPにはまってた頃はstructばっかりだったな。
データを持つなんてことは滅多にないし。
0697デフォルトの名無しさん2015/10/01(木) 21:41:20.18ID:QENZiec8
「構造体」などという定義の不明な用語を用いる奴は
アビバに行ってエクセルでも勉強してた方がいい
0698デフォルトの名無しさん2015/10/01(木) 21:55:36.66ID:LB/4icN7
>>692-695
structの実体は全メンバがデフォルトでpublicなだけのclassにすぎないと
ストラストロウpップ本のどっかに書いてあった

一方クラス名と構造体名は同ではないが理由は知らん
0699デフォルトの名無しさん2015/10/01(木) 22:03:04.84ID:QENZiec8
「全メンバがデフォルトでpublicなだけのclassにすぎない」
そんな嘘つき本は
早く窓から投げ捨てた方がいい
0700デフォルトの名無しさん2015/10/01(木) 22:21:18.99ID:BshYJ+by
親クラスがデフォルトでpublic

あとは何だっけ?
0701デフォルトの名無しさん2015/10/01(木) 22:23:51.58ID:+UnsXPfG
classから/への継承ができない
POD型になれる(Cと共用することができる)
0702デフォルトの名無しさん2015/10/01(木) 22:32:16.11ID:CWBNpZAW
classもPODになれるぞ
0703デフォルトの名無しさん2015/10/01(木) 22:32:25.91ID:LB/4icN7
classにできてstructにできないこと(あるいはその反対)とは?
2011年の規格になるがn3337.pdfならタダでダウソできるので
classとstructの違いがどこに書いてあるか指摘してくれると嬉しい
0704デフォルトの名無しさん2015/10/01(木) 22:35:10.94ID:QENZiec8
三つ前のレスも読めない奴は
早く眼科に行った方がいい
0705デフォルトの名無しさん2015/10/01(木) 22:40:03.08ID:LB/4icN7
>POD型になれる(Cと共用することができる)
classもPOD型になれる
n3337.pdfのChapter 9より
>A POD struct109 is a non-union class that is both a trivial class and a standard-layout class, and has no
>non-static data members of type non-POD struct, non-POD union (or array of such types).
で、
>A standard-layout struct is a standard-layout class defined with the class-key struct or the class-key class.
なのである

classがCと共用できないのはそれはその通りだがC++内の話題か?
0706デフォルトの名無しさん2015/10/01(木) 22:40:18.43ID:o05Ai7EN
>>686
unique_ptrは逆に、所有権のない生ポの代替にはならないところがなぁ。
前に誰かが言っていたけど、コピー不可の「ほぼuniqueな」shared_ptrがあったらよさそうなのにな。

・基本、コピー不可
・使いまわす場合はweak_ptr(相当のもの)で
・それをlock()して得られるのも「ほぼuniqueなshared_ptr」
・それをローカルスコープの外に持ち出すには明確な記述が必要なんで
非ユニークな期間の管理は容易

自分でも作れるかもしれないけど、なんか落とし穴があったりするかな?
0707デフォルトの名無しさん2015/10/01(木) 22:41:52.40ID:LB/4icN7
>>704
で、classにできてstructにできないこと(あるいはその反対)とは?
0708デフォルトの名無しさん2015/10/01(木) 23:12:05.84ID:P62utjXs
>>699
どこが嘘つきなの?
0709デフォルトの名無しさん2015/10/01(木) 23:41:36.26ID:YVTNhxF0
>>706
それweak_ptr経由したら無限にコピー作れるよね
0710デフォルトの名無しさん2015/10/01(木) 23:46:09.70ID:BshYJ+by
クラスのメンバとして「所有権は持ってるけどコピーは可能としたい。だけど自分でnew deleteを書きたくない。」
っていう一番素朴ともいえる需要にはunique_ptrもshare_ptrも答えてくれないんだよね。
要素1個のvectorを持てば目的には合うけど、それはちょっと。
0711デフォルトの名無しさん2015/10/02(金) 00:09:17.73ID:Ty2xSLut
所有権の無いナマポはナマポでいいんじゃ。
getして作る物じゃないの?
0712デフォルトの名無しさん2015/10/02(金) 00:12:30.94ID:E6p9V3H1
>>709
意図的にそうすることはできるけど、このポインタ使う人にとっては意図せずにそうなることを
防げれば十分でしょ、って理屈。
0713デフォルトの名無しさん2015/10/02(金) 01:37:40.67ID:qg2lMJZH
使い道が良くわからない
unique_ptrでgetで良いじゃんって思う
0714デフォルトの名無しさん2015/10/02(金) 01:42:57.88ID:UOnaTtLl
>>706 が言ってるのは「基本的にはいつ勝手に解放されてもいいけどlock中に解放されるのだけはやめてほしいweak_ptr」じゃないかな
0715デフォルトの名無しさん2015/10/02(金) 01:53:10.11ID:UOnaTtLl
あるいは「必要なときだけ一時的に強参照に変えられるweak_ptr」か
0716デフォルトの名無しさん2015/10/02(金) 02:04:44.52ID:t/H9126e
>>715
それただのshared_ptr
0717デフォルトの名無しさん2015/10/02(金) 02:12:07.99ID:UOnaTtLl
>>716
そだね
今リファレンス読み直してみたけど、普通にshared_ptrとweak_ptrでいいじゃんと思ってしまった

>>712 の言い分もわからなくはないけど、ちょっと動機としては弱いよね
0718デフォルトの名無しさん2015/10/02(金) 03:28:41.26ID:ONuETOP6
weak_ptrをスレッド跨ぎに使うととても便利だぞ。

スレッドAからスレッドBに作業を依頼するとき、スレッドA内でコールバックする
オブジェクトをweak_ptrに入れてスレッドBに渡す。
スレッドBは結果を返す時、weak_ptrを一緒に返す。
スレッドAは結果が返されたとき、weak_ptrが生きているかどうかで処理を継続するか
破棄するか決定する。
0719デフォルトの名無しさん2015/10/02(金) 04:11:04.12ID:mB2ii6Jd
>>718 C++ でおk
0720デフォルトの名無しさん2015/10/02(金) 05:15:26.18ID:XsCDb17v
おれは生ぽ派
0721デフォルトの名無しさん2015/10/02(金) 06:56:56.47ID:K61YkWCE
ちゃんと後処理できるならなんでもいいのではないかな
0722デフォルトの名無しさん2015/10/02(金) 07:00:41.57ID:BtQI5LIk
unique_ptrを使うべき典型的な例くだちゃい
0723デフォルトの名無しさん2015/10/02(金) 07:01:11.19ID:BtQI5LIk
shared_ptrの間違いでちゅ
0724デフォルトの名無しさん2015/10/02(金) 08:06:56.11ID:ZDJdmWRt
>>723
>>687
0725デフォルトの名無しさん2015/10/02(金) 08:13:15.20ID:t/H9126e
>>723
CopyOnWriteを実装する時とか
0726デフォルトの名無しさん2015/10/02(金) 18:07:26.95ID:7Yht83rO
C++ って実際どういうところで使われてるん?
0727デフォルトの名無しさん2015/10/02(金) 18:12:29.97ID:TpeMyO1f
基本的なソフト、ライブラリの多くはC++製だろ。
スクリプト言語とかもC++製が多くてC++なしでは実装できないのが多い。
0728デフォルトの名無しさん2015/10/02(金) 18:41:39.93ID:8WzixXxl
webブラウザ
0729デフォルトの名無しさん2015/10/02(金) 19:07:51.07ID:AwBeWBui
Haskellで書きなおせば省メモリーかつ10倍高速になるという人もいるね。
0730デフォルトの名無しさん2015/10/02(金) 19:16:46.43ID:8WzixXxl
>>729
やってから言えって話だな
0731デフォルトの名無しさん2015/10/02(金) 19:47:03.73ID:0lgmsqw8
Haskellが省メモリだと…?
0732デフォルトの名無しさん2015/10/02(金) 22:01:36.63ID:PixdrOkR
コードサイズが省メモリという意味では。
「関数型ならこんなにシンプルにかける!」って宣伝よく見るし。
ってか仕方ないことだけどC++がコードサイズ大きい
0733デフォルトの名無しさん2015/10/02(金) 22:50:51.68ID:oFtaSIUa
>>726
3Dのゲーム開発はみんなC++だよ
C++じゃないと重すぎてまともに動かん
0734デフォルトの名無しさん2015/10/02(金) 22:57:22.05ID:w2Lswr2g
>任天堂のゲームはこれまで,CやC++といったプログラミング言語で開発されており,
>そのため高いパフォーマンスを発揮していたが,反面,開発に時間がかかっていたという。
>このセッションではそれ以外の方法,つまりHTMLやJavaScriptを使ってWii Uの全機能にアクセスしつつ,
>より手軽にゲーム開発を行う方法が説明されるようだ。
0735デフォルトの名無しさん2015/10/02(金) 23:00:04.35ID:TpeMyO1f
それはないかと。ウェブブラウザで3Dしたり、3Dエンジン・ライブラリを呼ぶ形だと言語速度差少なかったり。
0736デフォルトの名無しさん2015/10/02(金) 23:36:20.41ID:dTb/cHoI
C++使う目的がスピードなのは今も変わらないと思うが、RustやGoがいくら早くなろうが、C++は使われ続けると思う。
最適化にこだわろうと思った場合C++以外の言語では話にならない。
0737デフォルトの名無しさん2015/10/02(金) 23:39:28.76ID:07KUSVzt
C++は柔軟性が抜群
0738デフォルトの名無しさん2015/10/03(土) 00:29:39.75ID:mC8UjI5p
Haskellが一番速いといわれてるけどな。
0739デフォルトの名無しさん2015/10/03(土) 00:37:13.63ID:TzdXrt85
>>738
Haskellが一番速いという言葉に強い魅力を感じるのですが、数値演算では、C++やFortranと
較べてどれくらい速いでしょうか。
そもそもHaskellには、数値計算用の函数(三角関数、対数、指数などの初等函数)は
インプリメントされているでしょうか。そしてその有効桁数はどれくらいでしょうか。
少なくとも12桁できれば、16桁以上欲しいのですが。
0740デフォルトの名無しさん2015/10/03(土) 01:40:39.95ID:F9VAPS7W
Haskellはやめとけ。理想的なコンパイラが実現したらとかいう想定なんだろ?
現実では未実装で。
純粋関数型言語とそのコンパイラが完成されれば速いんだろうが。
0741デフォルトの名無しさん2015/10/03(土) 01:48:15.69ID:OaBps6Fz
そんなに早いならHaskellの動画エンコーダーがあっていいはず
0742デフォルトの名無しさん2015/10/03(土) 01:48:36.78ID:F9VAPS7W
Haskell   自動並列化でググッた結果。





マルチコアでスケールするようになった Haskell2015年2月12日
Glasgow Haskell Compiler(GHC)は、関数型言語Haskellの主要コンパイラです。
GHCは(並列性に加えて)並行性を主要な目的として長年開発されてきました。
http://www.iij.ad.jp/company/development/tech/activities/haskell/


マルチコア時代の最新並列並行技術〜 Haskellから見える世界 〜 [PDF ...
http://www.iij.ad.jp/company/development/tech/techweek/pdf/141126_2.pdf


Concurrent HaskellおよびParallel Haskell
http://www.kotha.net/ghcguide_ja/7.0.4/lang-parallel.html


【Async】Haskellによる並列・並行プログラミングを読了した (2)【Concurrent】 | FiS Project
http://www.fisproject.jp/2015/08/parallel-and-concurrent-programming-in-haskell-2/


未来の並列プログラ ミング言語としての Haskell
http://ll.jus.or.jp/2008/slides/6/shelarcy.pdf
0743デフォルトの名無しさん2015/10/03(土) 02:07:18.42ID:4GRc9B1x
URL貼るだけで自分の見解を何も述べられない低能は去れ
0744デフォルトの名無しさん2015/10/03(土) 03:44:12.63ID:RI5yhOba
知らんHaskellは
しかしインタプリタ言語であるErlangがとある大規模並列案件についてC++より早く動いたという話をどっかで聞いた

そりゃー開発コストとバグのリスク(コードの読み辛さ)を考えずに最適化設計すれば最終的にはC++が勝つだろうけども
0745デフォルトの名無しさん2015/10/03(土) 04:40:55.15ID:HrivTQ+h
Haskellは強力な型システムのおかげでコンパイルが通ればバグが無いことが保証されるといわれてるけどな。
0746デフォルトの名無しさん2015/10/03(土) 04:44:51.70ID:mgovDRA4
何その都市伝説
0747デフォルトの名無しさん2015/10/03(土) 08:02:15.82ID:I2+KZq9W
>>744
Java以下の速度のErlangがC++に勝てるわけねーだろwwww
0748デフォルトの名無しさん2015/10/03(土) 08:12:08.92ID:I2+KZq9W
Erlangが使われれる理由は速度じゃなくて、強力なフォールトトレラント性
Haskellは遅延評価がある時点で並列向いてない
触った事あればすぐわかるだろうに、本当に恥ずかしい奴だな
0749デフォルトの名無しさん2015/10/03(土) 08:47:05.87ID:QGdOGmK1
そう、Erlangは強力なフォールトトレラント性が特徴。
生命維持装置のような何十年も安定して稼働し続けなければならない物には
Erlang以外使えない。
エラーが起きた時点で国際宇宙ステーションの全員が死ぬことになる。
再起動も許されない。
そういったミッションクリティカルな場所で使うためにErlangが開発された。
0750デフォルトの名無しさん2015/10/03(土) 08:50:57.42ID:QGdOGmK1
Erlangの最大の美点は静的検査によりコンパイルが通ればバグが無いことを保証できる点。
この特長によってJavascript並みの安全性を確保できるといわれている。

これはC++では絶対に実現できない。
0751デフォルトの名無しさん2015/10/03(土) 08:52:47.18ID:OaBps6Fz
>Javascript並みの安全性
ここ笑うところなのかな
0752デフォルトの名無しさん2015/10/03(土) 08:53:15.81ID:I2+KZq9W
Javascript並みの安全性?
ポエムは自分のブログでやってくれよキチガイ
0753デフォルトの名無しさん2015/10/03(土) 08:58:23.08ID:QGdOGmK1
また、Erlangは強力な並列性を持ち、2000万スレッドのベンチマークが行われたこともある。
C++プログラムとの比較でErlangは文字通り2000万倍の性能をたたき出した。
これは大きな差であり、現在のスーパーコンピュータではErlangが主流となっている。
0754デフォルトの名無しさん2015/10/03(土) 08:59:57.30ID:I2+KZq9W
ErlangがC++より型付け強いってのも笑うところ
名前以外全く知らないのがわかる
0755デフォルトの名無しさん2015/10/03(土) 09:06:44.71ID:I2+KZq9W
あ、これ本物のキチガイだ
0756デフォルトの名無しさん2015/10/03(土) 09:07:13.61ID:eQmk9cX0
>>750
?
Erlangはチューリング完全じゃないのか?
0757デフォルトの名無しさん2015/10/03(土) 09:28:38.72ID:QGdOGmK1
C++が負けたのがそんなに悔しいですか。
0758デフォルトの名無しさん2015/10/03(土) 09:35:22.34ID:hNjBKdKI
あーくやしいくやちくてしょんべんちびっちゃうわー
0759デフォルトの名無しさん2015/10/03(土) 09:37:58.97ID:RI5yhOba
>>747
gccと比べたら確かに遅かったorz
ttp://benchmarksgame.alioth.debian.org/u64q/benchmark.php?test=all&lang=erlang&lang2=gcc&data=u64q
しかし事はユーザーが書いたコード断片の実行速度ではないのかも知れぬ、

>>748
>Haskellは遅延評価がある時点で並列向いてない
ぬんで?遅延評価しようがすまいがimmutableなオブジェクトだけの世界なら排他とか生じないんじゃ…
0760デフォルトの名無しさん2015/10/03(土) 10:00:51.34ID:I2+KZq9W
>>759
Haskellの遅延評価はあらゆる物に適用される
で、サンク取り払ってメモ化される度に止まって逆説的に向いてないというオチ
ここらへんは自分で制御しようと思えばできるから
飽くまで他の並列化を前提とした言語と比べて向いてないという意味
0761デフォルトの名無しさん2015/10/03(土) 10:37:40.95ID:R/xGcqGB
>>745
でもコンパイルエラーを突き止めるのに専用のツールが必要だったり
コンパイルが通るまでに半年かかったりするんでしょ?
0762デフォルトの名無しさん2015/10/03(土) 10:42:17.61ID:R/xGcqGB
>>748-749
フォールトトレラントのおかげで
内部で死にまくってても見過ごしてるだけというオチじゃなかろな
0763age2015/10/03(土) 11:02:06.53ID:xcjdOcxh
Queueに関して教えて下さい。

queue<BYTE> fifo;

として定義した場合、pushできるfifoの最大の深さはどこで確認できるのでしょうか?
fifoに書き込まれているバイト数はsizeで確認できますが、
深さに関する事が調べたのですがどこにも書かれていませんでした。

用途としては、10MByte位のFIFOを用意しておいて、
fifoに半分位たまったら一括でファイルにライトする様な処理を考えています。
0764デフォルトの名無しさん2015/10/03(土) 11:09:56.72ID:OaBps6Fz
深さとサイズがどう違うんだ
0765デフォルトの名無しさん2015/10/03(土) 11:36:19.09ID:UaQHAHfU
その場合は、dequeを調べればいいんじゃないかな?
0766デフォルトの名無しさん2015/10/03(土) 11:38:25.79ID:JIliozMV
自分がハッカーかどうかわからないのですが
ハッカーになると自分はハッカーであるとわかるものなんですか?
それとも人に言われてはじめて気づくものなんでしょうか?
0767デフォルトの名無しさん2015/10/03(土) 11:49:29.97ID:UaQHAHfU
ハッカーはハッキングします。
あなたはハッキングしましたか?
0768デフォルトの名無しさん2015/10/03(土) 11:52:29.29ID:JIliozMV
それはクラッカー
0769デフォルトの名無しさん2015/10/03(土) 11:56:32.43ID:y6+evVSu
あたり前だ
0770デフォルトの名無しさん2015/10/03(土) 12:05:26.41ID:UaQHAHfU
ハッキングによって入手した情報を悪用し、罪を犯すのがクラッカーです。
ハッカーは罪を犯すことを目的にハッキングはしません。
0771デフォルトの名無しさん2015/10/03(土) 14:23:52.05ID:bfkpTtOm
まあ、俺クラスになると自分がハッカーだと自覚できてるな
0772デフォルトの名無しさん2015/10/03(土) 14:45:00.58ID:bKUFTYSg
俺がこんなに強いのも…

C++関係ないね。
0773デフォルトの名無しさん2015/10/03(土) 15:03:31.31ID:6CgBohu1
カーしか共通点無い
0774デフォルトの名無しさん2015/10/03(土) 15:04:24.02ID:6CgBohu1
クラッカーの話題が出てたのか。スマン
0775デフォルトの名無しさん2015/10/03(土) 16:05:55.00ID:8AFtPGV4
まあ、俺クラスになると自分が馬っ鹿ーだと自覚できてるな
0776デフォルトの名無しさん2015/10/03(土) 16:08:13.17ID:DbjSwrzl
禿げてないとハッカーにはなれない
0777デフォルトの名無しさん2015/10/03(土) 16:09:09.20ID:4asnCA7K
俺クラスになるとその点も問題ない
0778デフォルトの名無しさん2015/10/03(土) 16:12:08.77ID:H2im6CWF
自作クラス最強説
0779デフォルトの名無しさん2015/10/03(土) 16:46:46.05ID:hZCkGPov
やっぱりナビスコだな
0780デフォルトの名無しさん2015/10/03(土) 17:03:29.86ID:5Y3yXyVr
C++使ってる時点で十分ハッカーだと思うけど。
0781デフォルトの名無しさん2015/10/03(土) 18:24:19.53ID:bfkpTtOm
>>779
それはクラ…リッツとかオレオ!
0782デフォルトの名無しさん2015/10/03(土) 20:23:09.16ID:HRif353B
ハッカーの大部分が悪いことをするので、ハッカーは悪事を働く人を意味するようになった。
そこで、ハッカーたちはクラッカーという新しい言葉を作り、俺はハッカーだから
悪いことをしていないと取り調べで言うようになった。
0783デフォルトの名無しさん2015/10/03(土) 20:24:08.26ID:I2+KZq9W
リンゴマークをこよなく愛する
0784デフォルトの名無しさん2015/10/03(土) 20:27:19.39ID:25KCQVnt
ハッカーの彼女ってペンギンだろ
0785デフォルトの名無しさん2015/10/03(土) 20:28:46.01ID:HRif353B
クラッカーという言葉を作って、犯人はクラッカーだと言うようになった。
0786デフォルトの名無しさん2015/10/03(土) 20:30:44.43ID:HRif353B
電話を無料でかける装置を50ドルで売った。
これは良く売れた。
マンハッタンのビジネスマンが一日に50台注文することもあった。
この利益でいくつかのフリーソフトウェアが完成した。
0787デフォルトの名無しさん2015/10/03(土) 21:34:06.93ID:GmUX5JOa
2つの矩形(XYWH)を覆う四角形Z(XYWHR)を求めるにはどのような計算式を書けばいいですか?
0788デフォルトの名無しさん2015/10/03(土) 21:40:46.15ID:8iRLWTDj
std:::min と std::max を使うと簡単だよ
0789デフォルトの名無しさん2015/10/03(土) 21:47:00.05ID:GmUX5JOa
>>788
矩形から矩形ならそれで出来ますが、矩形から傾きのある矩形を求める方法が知りたいです
0790デフォルトの名無しさん2015/10/03(土) 21:48:38.22ID:DW8kiwr4
ちょっと図で書いてみて
0791デフォルトの名無しさん2015/10/03(土) 21:53:58.07ID:wd3SBpbJ
傾きありだと飼いは無数にあるから条件が必要
0792デフォルトの名無しさん2015/10/03(土) 21:58:00.99ID:8iRLWTDj
>>789
これでどう?
動画も有るよ
http://sssiii.seesaa.net/article/194921654.html
0793デフォルトの名無しさん2015/10/03(土) 22:07:52.43ID:GmUX5JOa
シューティングゲームのすり抜け防止に使いたい
1F前の矩形+現在の矩形で矩形を求めて判定した後高速判定)、当たっていれば傾きありの矩形で判定したい(厳密判定)
0794デフォルトの名無しさん2015/10/03(土) 22:18:40.75ID:eQmk9cX0
頂点8つだし、厳密なものでなくていいなら、最も遠い頂点間を長径とする長方形でいいんじゃないの?
0795デフォルトの名無しさん2015/10/03(土) 22:30:23.52ID:GmUX5JOa
線分でしてみます。
0796デフォルトの名無しさん2015/10/03(土) 22:31:15.33ID:RI5yhOba
指定した点Pが凸多角形Xの内側か外側かはベクトルの内積で判定できるので、
凸多角形Yが凸多角形Xと重なりを持つかどうかなら、Yの辺を構成する全部の画素について上と同じことをやれば良い、

もし、YとXが非接触の状態から、Yの内側にXがいきなり飛び込むケースが在る場合は、
念のためXとYを入れ替えた判定もやる
単純にビットマップのANDでも取る方が幸せ鴨、

本当かどうかは知らん
0797デフォルトの名無しさん2015/10/03(土) 22:34:55.68ID:RI5yhOba
訂正
誤:単純にビットマップのANDでも取る方が幸せ鴨、
正:が、小さい判定領域であればそこまでやるより単純にビットマップのANDでも取る方が幸せ鴨、
0798デフォルトの名無しさん2015/10/04(日) 01:30:06.66ID:RUTa+wSI
>>793
簡単
頂点を引き伸ばせばよい
http://uploda.cc/img/img56100238268d5.png
↑適当な図
0799デフォルトの名無しさん2015/10/04(日) 03:21:04.05ID:ZIaV4muE
>>798
そういう図は何で描いてるの?
0800デフォルトの名無しさん2015/10/04(日) 04:42:29.50ID:r2m0aNE2
C++スレなんだからC++じゃないの
ちな、このレスもC++で書いてる
0801デフォルトの名無しさん2015/10/04(日) 10:03:01.78ID:J4whK/1Y
JavaScriptの、isPointInPath のように、
その点が、図形のパス内にあるかどうか、判別できないの?


それか、RGBAのアルファ値の、250〜255を、
アルファ値として使わず、
物体の判定用フラグとして使うとか
0802デフォルトの名無しさん2015/10/04(日) 10:06:56.41ID:yZJnSbHB
>250〜255を、アルファ値として使わず

30年前のC++使いが考えそうなクソ設計だな
0803デフォルトの名無しさん2015/10/04(日) 10:40:50.29ID:+wQ6czRK
内積で判定するのってどうやるの?
0804デフォルトの名無しさん2015/10/04(日) 11:26:51.95ID:r2m0aNE2
>>803
言いたかったのは
ttp://www.nttpc.co.jp/technology/measurement.html
の「線分と点の位置関係の判定」の部分
(最後の方の簡単な式。前半の大量の式は内外判定ではなくて距離の算出方式の解説に費やされている。

だが、上の記事の第2回目にさらにいろいろ書いてあったわ;
ttp://www.nttpc.co.jp/technology/number_algorithm.html

世間は広大だわ、
0805デフォルトの名無しさん2015/10/04(日) 19:47:31.94ID:T8eNBhl9
boost::geometry に何かないの?
0806デフォルトの名無しさん2015/10/05(月) 14:18:19.75ID:VFapxPBu
VC++2015にて

std::map<std::wstring, std::wstring> testmap;
testmap[L"Hello"] = L"World";
const std::map<std::wstring, std::wstring>& testmap2 = testmap;
std::wstring val = testmap2[L"Hello"];

この4行目でC2678
二項演算子 '[': 型 'const std::map<std::wstring,std::wstring,std::less<_Kty>,std::allocator<std::pair<const _Kty,_Ty>>>' の
左オペランドを扱う演算子が見つかりません (または変換できません)

が発生するんだけど、要は「鍵と要素がwstring」で「constな」mapを上記のようにリテラル文字列で[]参照する書き方ってできる・・・?
const std::wstring ws = L"Hello";
std::wstring val = testmap2[ws];
とかやってもだめだった

エラーの詳細としては、mapのoperator[]に「wstring&」と「wstring&&」の両方があって曖昧だからNGらしい
そもそもconstなmapなのに要素変更にも使える[]を呼んでいるのがダメってことかいね?const外せば動くし
0807デフォルトの名無しさん2015/10/05(月) 14:26:27.32ID:9/62paZL
同じ質問が最近にもあったような
0808デフォルトの名無しさん2015/10/05(月) 14:37:36.36ID:VFapxPBu
本スレの過去をmapで検索してもそれらしき件は見あたらず・・・(過去ログは読めない)
0809デフォルトの名無しさん2015/10/05(月) 14:41:46.58ID:HSAikNuy
>>806
testmap[L"jerk"];
これだけで副作用が生じるわけで諦めるしかあんめー

std::wstring val = testmap2.find(ws)->second;
あえてendが返ったか見てないけど、
それはoperator[]と同質の問題ってことで
0810デフォルトの名無しさん2015/10/05(月) 14:43:47.49ID:zntwOtDH
std::mapはconst版( operator[](const Key&) const )は無いよ−。
キーがなかったら新しい値を挿入するという動作だから。
http://ja.cppreference.com/w/cpp/container/map/operator_at
findしましょ。
0811デフォルトの名無しさん2015/10/05(月) 14:48:47.23ID:VFapxPBu
そうか、[]の時点で要素増えるからダメか
0812デフォルトの名無しさん2015/10/05(月) 23:43:18.77ID:EGogu2NJ
C++の文法はクソだからな
コンパイラーが手を抜いてプログラマーが不利益を被る良い例だ
0813デフォルトの名無しさん2015/10/06(火) 00:10:39.56ID:1Ze1Ogug
>>806 https://www.google.co.jp/search?q=std+map+at
0814デフォルトの名無しさん2015/10/06(火) 01:05:09.41ID:CpsQkQ9O
C++の仕様がいい加減だからなのか、
regexのマルチライン対応なんかは、VCは対応でGCCは非対応だからな
行頭の^が文字列の頭になると行頭じゃえらい違いだよな
0815デフォルトの名無しさん2015/10/06(火) 01:23:22.63ID:EO5+cWSu
STLに問題があるようだな
0816デフォルトの名無しさん2015/10/06(火) 01:25:23.49ID:eWd5i2Y2
>>812
文法はあまり関係ないけど?
低脳が口挟んでも恥かくだけだぞ
0817デフォルトの名無しさん2015/10/06(火) 11:20:11.67ID:k9h8FU3j
むしろ文法があんなだから
コンパイラは手を抜けないとも
0818デフォルトの名無しさん2015/10/06(火) 11:54:27.84ID:+syJpT4+
文法じゃなくて意味が糞なんだよな
0819デフォルトの名無しさん2015/10/06(火) 12:27:05.15ID:Zn1/MkM8
そうそう、mapで思い出したけど
テーブルって実行時に初期化したくないやん

ある程度の大きさのmapの初期化を出来るだけ実行時の生成コストを少なくするように記述するにはどうしたらいいのかな?

環境によって違うけど
構造体の配列とかだと、初期化子リスト付けとくと、.dataセクションに即値が書かれてて
初期化時にはそれをコピーしてポインタをセットして準備完了

それと同じようなことをmapでやって見たい

c++11だとmapでも初期化子リスト使えるからそれでいけるのかな?
何年か前にg++でコンパイルして.dataセクション見てみたけど当時はmapの即値になってるように見えなかった

c++03とかだとどんな手があるんだろう??
0820デフォルトの名無しさん2015/10/06(火) 12:35:26.69ID:k9h8FU3j
そうそう、mapで思い出したけど
テーブルって実行時にメモリ使いたくないやん

ある程度の大きさのmapは実行時にメモリのコストが大きいけどどうしたらいいのかな?

https://research.preferred.jp/2011/07/stllike-containers/
0821デフォルトの名無しさん2015/10/06(火) 16:00:02.92ID:wWQ1shVW
初期化はだって実行時じゃないか?
0822デフォルトの名無しさん2015/10/06(火) 20:34:00.60ID:hYLbQ3+q
どうしてもdataセクションにそのままアクセスしたいのであればキーと要素を持つクラスをキーでソート済みの配列で書いてstd::mapのconstメンバ関数と同じものを持つラッパークラス書くとかかな
0823デフォルトの名無しさん2015/10/06(火) 21:14:23.94ID:mXRqVUnf
>>821
要するに map を実行時に構築するんじゃなくてコンパイル時に構築しといて実行時はメモリーコピーだけにならんもんか?
っつーことでしょ
たまに俺もそう思うことがある
0824デフォルトの名無しさん2015/10/06(火) 21:27:26.34ID:jUDOLtzl
確かにねー
そんな気することよくあるよな
constexprなコンストラクタでどこまでできるのかと
0825デフォルトの名無しさん2015/10/06(火) 21:34:08.29ID:MCB0h3nq
シリアライズかデータベースつかえ
0826デフォルトの名無しさん2015/10/06(火) 21:37:47.97ID:MCB0h3nq
>>820の意図するところと、>>823は別で>>820は省メモリにしたいって話だろ。
0827デフォルトの名無しさん2015/10/06(火) 21:54:53.32ID:2Pt1OMoQ
配列に入れて線形探索
要素数が小さいうちは線形探索はもともと他より致命的に悪いわけではないし
今日日のCPUならキャッシュと分岐予測とOOOの華麗な連携プレーを目の当たりにできる
0828デフォルトの名無しさん2015/10/06(火) 22:43:09.92ID:8+tr+OYB
これは遅くなりそうだからってがんばってマップ作ったら
線形探索ゴリ押しの方が速かったことならある
0829デフォルトの名無しさん2015/10/06(火) 22:47:58.27ID:Cu8Zkmdv
二分検索じゃだめなの
0830デフォルトの名無しさん2015/10/06(火) 23:07:19.25ID:hYLbQ3+q
std::sortもstd::lower_bound もあるんだからバイナリサーチぐらいしようぜと
0831デフォルトの名無しさん2015/10/07(水) 05:07:06.28ID:vlTfjNXN
>>826
>>823 は >>819 の

> ある程度の大きさのmapの初期化を出来るだけ実行時の生成コストを少なくするように記述するにはどうしたらいいのかな?

の話だよ
データベースとか頓珍漢過ぎ
0832デフォルトの名無しさん2015/10/07(水) 07:13:23.42ID:JsRvQDZJ
コードの工夫で初期化コストを改善するのではなく
データベースでの永続保存という別手法での改善方法もあり得ることを示すことが
それほどトンチンカンとも思えないが
0833デフォルトの名無しさん2015/10/07(水) 08:23:24.99ID:PbTUGDDG
mapはエントリーを追加できるんだからドンダケ待ってもそうはならないと思。
0834デフォルトの名無しさん2015/10/07(水) 08:34:53.72ID:q7nyuwNL
>>832
なにを改善したいかも理解してないアホ w
0835デフォルトの名無しさん2015/10/07(水) 08:52:16.49ID:d/PBWwg/
static_mapみたいな名前になるんだろか。
0836デフォルトの名無しさん2015/10/07(水) 09:44:01.58ID:0iwSPjqO
Rubyでは、Hashの要素数が増えていくと、再編成される

バケット数は、2の累乗付近の素数を使う。
つまり、倍々に増やしていく
8+3, 16+3, 32+5, 64+3, 128+3, 256+27, 512+9...

1つのバケットには、平均して5つの要素を入れる(衝突)。
11*5=55, 19*5=95, 37*5=185...

つまり要素数が、56, 96, 186...個になると、
バケット数を増やして、再編成する

普段、1万個の要素を追加するのに、8msかかるが、
再編成するタイミングでは、20msかかる。
要素数が増えていけば、もっとかかるだろう
0837デフォルトの名無しさん2015/10/07(水) 11:02:09.32ID:8pl0pVx/
C++のスレでRubyとかアホなの?
環境も書かずに2msとかアホなの?
C++なら1万個追加で1msだ
0838デフォルトの名無しさん2015/10/07(水) 11:19:07.99ID:vH7WjwMJ
昔、某オンラインゲームの支援ツール作って、プロセスメモリ上にあるVC++2008実装のstd::mapの
テーブルを直接アクセスするコードを書いたのを思い出した
0839デフォルトの名無しさん2015/10/07(水) 11:20:45.74ID:Qd1lXfpw
そういった成功体験は捨てたほうがいい
08408362015/10/07(水) 11:50:30.95ID:0iwSPjqO
「Rubyのしくみ」という本に書いてあるのだが、
RubyのHashは、Peter Moore が考案したもの。
C++でも、彼のロジックを使っているのなら、同じかなと思って

mapの要素数が増えていくと、
バケット数を増やして、再編成されるので、
その際、全要素が移動するから、どうしても遅くなる

だから、メモリ的には損だが、
最初から大きめのバケット数を確保しておけばよい
0841デフォルトの名無しさん2015/10/07(水) 13:03:07.75ID:gQOBln3k
ん、std::hashって算法まで規定されてたっけ?
17.6.3.4を見る限りそうではなさそうだが
0842デフォルトの名無しさん2015/10/07(水) 14:19:20.92ID:4iZc7XH3
struct hoge{};
const hoge h;
をコンパイルすると
error: uninitialized const 'h'
と出ます。何故ですか
constを外すとコンパイルできます。GCC4.4です。
0843デフォルトの名無しさん2015/10/07(水) 15:58:16.91ID:2UUkd3/F
定数は値が書き換えられないわけで
最初の時点で値を代入しなかった場合、「お前なんのために定数宣言したの?」って突っ込まれてる
0844デフォルトの名無しさん2015/10/07(水) 16:15:42.33ID:4iZc7XH3
vcではエラーにならないのは何故ですか
どっちが正しいですか
0845デフォルトの名無しさん2015/10/07(水) 16:35:55.12ID:vH7WjwMJ
どっちかというとGCCのほうが余計なお節介?
0846デフォルトの名無しさん2015/10/07(水) 16:40:45.70ID:jyxNZJK8
そうそう、馬鹿が作ったプログラムがちゃんと動かなくてもコンパイラの責任じゃないしね…
0847デフォルトの名無しさん2015/10/07(水) 16:42:23.02ID:Qd1lXfpw
http://ideone.com/Sr2PO1
エラーにならないけれど
0848デフォルトの名無しさん2015/10/07(水) 17:24:17.24ID:gQOBln3k
842は警告ではなくエラーなのはなぜかと聞きたいんだろ
0849デフォルトの名無しさん2015/10/07(水) 17:42:19.19ID:tt9P1ak1
どっちが正しいも糞もないのでは
0850デフォルトの名無しさん2015/10/07(水) 19:09:00.13ID:qAlHmwsj
gccはいつも糞だから、これもgccが悪いんじゃねーの。
0851デフォルトの名無しさん2015/10/07(水) 19:11:12.75ID:Qd1lXfpw
gccではエラーにならないと言っているだろ
0852デフォルトの名無しさん2015/10/07(水) 20:31:15.75ID:lwnukUe8
なるから言ってるんですアホなんですか
0853デフォルトの名無しさん2015/10/07(水) 21:27:09.31ID:BAz1ThzD
>>849
少なくともお前が糞なことは確か
0854デフォルトの名無しさん2015/10/07(水) 21:40:43.83ID:3DMfLJBU
標準C++ではエラーになるのが正しい
VC++でエラーにならないなら標準非準拠か独自拡張

クラス型のconstオブジェクトをデフォルト初期化(で定義)するときは
そのクラスにはユーザ定義のデフォルトコンストラクタがなければならない

>>847がエラーにならないのは静的記憶期間のためゼロ初期化されて上記には該当しないから
0855デフォルトの名無しさん2015/10/07(水) 23:01:49.00ID:JsRvQDZJ
>>854
>ゼロ初期化されて上記には該当しないから

フーン、それはISO/IEC 14882:2014のどこに書いてあるのですか?
0856デフォルトの名無しさん2015/10/07(水) 23:06:57.63ID:pNycS8F+
パーサー書いたことある人いますか
一応作ったけどすごい難しいというか面倒というか
どういったアルゴリズムがいいのか馬鹿だからわからん
0857デフォルトの名無しさん2015/10/07(水) 23:22:04.98ID:ftNCaisU
BoostにC++パーサーがあったような
0858デフォルトの名無しさん2015/10/07(水) 23:23:53.25ID:Kru1mWVv
boost::spiritでおk
0859デフォルトの名無しさん2015/10/07(水) 23:24:01.37ID:gQOBln3k
(1)文字単位の検査 →エラー文字を弾く
(2)文字を結合してトークンを作る →エラートークンを弾く、コメントなど延期トークンをまとめる
(3)トークンを結合して再帰的ツリーを作る →構造の欠損を弾く
(0)メタな表記がある場合、そのメタ表記についてまた(1)から逆再帰的に繰り返す
できたツリーを意味解析に渡す
0860デフォルトの名無しさん2015/10/07(水) 23:25:58.96ID:0v/h/3vS
>>856
オープンソースのパーサー腐るほどあるだろそれいっぱい読め
0861デフォルトの名無しさん2015/10/08(木) 00:13:00.11ID:p7bZHcv9
>>856
あります。
・(E)BNF
・HTTP
・Sentence segmentation
等書きました。
0862デフォルトの名無しさん2015/10/08(木) 04:32:10.77ID:FlZYA0H2
>>856
LL(5)位がおすすめ
0863デフォルトの名無しさん2015/10/08(木) 06:37:28.57ID:ETVAEvki
>>862
なんでLL(5)んああんだよ?
5記号先読みするパーサなんて一般的じゃないだろJK、

ていうかLL(1)(再帰下降構文解析の一番簡単なやつ)とかは
素人でも勝手に再発見するがそこで理解が止まってしまうと
数式のパーサで死ぬので(そのまま作ると2項演算子が全部右結合になってしまう
、やpっぱまずわ正規言語のパーサあたりからから作ってみて感触をつかんだるのちに
ボトムアップパーサの理解に進むべし、
0864デフォルトの名無しさん2015/10/08(木) 11:19:30.61ID:GTAWjzct
LL(1)はLL(1)文法になるように人工的に作り出した言語にしかほとんどつかえないからな
LL(5)位なら適当にある言語ならほとんど解析できるだろ
0865デフォルトの名無しさん2015/10/08(木) 12:23:57.11ID:GTAWjzct
左結合にしたければカッコつければいいだけだし
右結合する演算子なんて普通無いしな
0866デフォルトの名無しさん2015/10/08(木) 12:25:42.38ID:PEkcocuS
バックトラックはセキュリティの問題をはらみやすいので避けたほうが良い。
0867デフォルトの名無しさん2015/10/08(木) 12:28:11.85ID:GTAWjzct
また例の再帰関数大嫌い君か
0868デフォルトの名無しさん2015/10/08(木) 12:33:40.58ID:PEkcocuS
好き嫌いの問題ではないはず。

安全か安全でないか。
0869デフォルトの名無しさん2015/10/08(木) 12:39:28.24ID:GTAWjzct
妊娠と同じですとでも言いたいのか?
0870デフォルトの名無しさん2015/10/08(木) 13:46:07.06ID:XT2XQMd7
template関数をvirtualにはできない制限って今後のC++でも続くんでしょうか?
そもそもこの制限の理由は仮想関数テーブルを作るコストが大変だから、ってやつですよね?
コンパイル時間かかってもいいからやってくれ、ってニーズはないんでしょうか?
0871デフォルトの名無しさん2015/10/08(木) 14:03:10.79ID:jZEKLa+0
具体的にどういう風に仮想関数テーブルを構築したら
template関数のvirtual化が可能なんですか?
分割コンパイルは可能なのですか?
コンパイル単位を守れるのですか?
0872デフォルトの名無しさん2015/10/08(木) 14:29:05.60ID:1TGlpU6G
>>871
やってみろよ、まず
struct A
{
template <typename T>
virtual void func(T) { }
};
0873デフォルトの名無しさん2015/10/08(木) 14:40:04.09ID:jZEKLa+0
そんなこと出来っこないだろう、という返しだったのですが・・・
0874デフォルトの名無しさん2015/10/08(木) 14:48:15.03ID:jZEKLa+0
プログラムに必要なソースコードをグローバルな視点ですべて解析してから
コード生成を開始するならテンプレートな仮想関数どころか
もっととんでもない事が可能かも知れんが
C++はcpp単位で分割コンパイルするのがルールだから無理っていう
baseクラスをコンパイルしてvtable作る時には
それにどんな派生クラスがあるか分らないし、分らなくてもコンパイルできるように
なってるのがC++のルールだからね
0875デフォルトの名無しさん2015/10/08(木) 15:32:00.85ID:YWpiDxnr
テンプレートのインスタンスの概念すら知らないってことでしょ?
こんなの初心者レベルの内容じゃん
やってみろよじゃねーよ
0876デフォルトの名無しさん2015/10/08(木) 17:33:27.84ID:G0kXf/E8
むしろ出来ないと主張する根拠を聞きたいものだ
0877デフォルトの名無しさん2015/10/08(木) 18:00:23.72ID:TDkjtQvD
今の仕組みじゃ出来ないだろ。
普通のvtableより更にものすごく遅い
仕組みでやるなら出来ないことはないだろうが。
0878デフォルトの名無しさん2015/10/08(木) 18:07:23.28ID:G0kXf/E8
ISO/IEC 14882:2014は別にvtableの実装を要求してないのだが
「今の仕組み」が普遍的なものであるかのように語られても
0879デフォルトの名無しさん2015/10/08(木) 18:11:00.56ID:1TGlpU6G
vtable以外の実装の具体例もしくは具体案なしに空想論を語られてもねえ
今んとこ「できるわけない」という立場を取っているが
説得力のある反論〜反証は金払ってでも拝聴したい
0880デフォルトの名無しさん2015/10/08(木) 18:12:29.15ID:jZEKLa+0
普通に考えて無理だろう
実行時に動的にロードする事も有るし
うまくいくとは思えないね
0881デフォルトの名無しさん2015/10/08(木) 18:12:44.05ID:GTAWjzct
出来るからやるんじゃない
出来ないからやるんだよ
0882デフォルトの名無しさん2015/10/08(木) 18:13:11.65ID:TDkjtQvD
vtableより早い仕組みがあれば
vtableに置き換わるだろうが
vtableでできないなら何らかの
遅い仕組みで実装しなきゃいけない。
その機能を使わない場合に遅くならないようにするためおそらくはvtableとのハイブリッドになる。

少なくとも現状の仕様でできないのだから、できるというならリーズナブルな実装の一つでも提案しろと。
0883デフォルトの名無しさん2015/10/08(木) 18:20:47.25ID:G0kXf/E8
なんだ
「俺の使ってる糞コンパイラーではできない」
ってとか。そりゃしょーがない
0884デフォルトの名無しさん2015/10/08(木) 18:22:57.97ID:jZEKLa+0
struct base { template< typename T > virtual void method( T ){} };
struct derived : public base { template< typename T > void method( T ){} };
このとき、
base::method< int >();
base::method< float >();
derived::method< int >();
derived::method< float >();
の関数の実態があったとき、仮想関数に詰め込む順番をあわせる必要が有る
これはリンカで行うしかないが、動的にロードする場合はどうなるんだという問題が出る
また、derived::method<double>() を追加したとして
baseの方に対応する関数がなかった場合はどうするんだという問題が出る
リンカエラーにするのかvtableを拡張するのかどうするのか
動的にロードする時にどうするのか
0885デフォルトの名無しさん2015/10/08(木) 18:33:41.15ID:TDkjtQvD
凄いな。
それができるc++コンパイラを持っているらしいぞ。
0886デフォルトの名無しさん2015/10/08(木) 18:55:11.54ID:G0kXf/E8
「分割コンパイルするから無理」「テンプレートのインスタンスの考えからして無理」
と言うから理由を聞いてみたのだが
「ボクのvtable実装では無理」とか、話をすり替えるなんて

非仮想関数と非テンプレ仮想関数は追加オーバー無しでテンプレ仮想関数を実現する方法さえ思いつかないらしい
0887デフォルトの名無しさん2015/10/08(木) 19:11:16.86ID:TDkjtQvD
だから追加オーバーヘッドの無い
実装方法や実装したコンパイラを
具体的に出せと。
0888デフォルトの名無しさん2015/10/08(木) 19:14:33.28ID:jZEKLa+0
どちらにしても、C++は一つのcppのコンパイル中は、それしか見えない仕様
コンパイル単位とかいう物がある
だからテンプレート仮想関数のvtalbeの構築はリンカに頑張ってもらうしかないが
動的にリンクする場合はどうするんだという問題が出てくる
0889デフォルトの名無しさん2015/10/08(木) 19:20:02.77ID:e3P/In2F
>>841
されない
0890デフォルトの名無しさん2015/10/08(木) 19:28:15.57ID:idvE5Tw4
>>888
動的じゃなくてもリンカーがインスタンス化されてないtemplate仮装関数を発見しちゃったらtemplateのコードをインスタンス化してコンパイルやり直さなきゃいけないよね
動的リンクするならコンパイラを実行ファイルに組み込まなきゃいけない
JITありのインタプリタみたいなものになる

そんなものを規格に入れるわけがない
0891デフォルトの名無しさん2015/10/08(木) 20:03:43.82ID:YWpiDxnr
>>886
黙ってろゴミ
0892デフォルトの名無しさん2015/10/08(木) 20:13:36.43ID:ETVAEvki
vtable方式は構造体に(メンバ)関数へのポインタを埋め込む方法より
1段ポインタ参照が増えるから不利だが
vtable方式をやめるとdynamic_castの実現で頭を抱えることになると思う
0893デフォルトの名無しさん2015/10/08(木) 20:17:35.06ID:tERbEPZQ
相変わらず雲をつかむような話で喧嘩できるエスパーなスレですね
0894デフォルトの名無しさん2015/10/08(木) 20:19:58.94ID:fbjyyooL
え?お前出来ないの?
0895デフォルトの名無しさん2015/10/08(木) 20:43:07.22ID:YWpiDxnr
そもそも規格で駄目と明言されてる事なのに
自分じゃできないからって、実装方法すら他人を煽るわせびるわ
頭悪いにも程があるだろコイツ
0896デフォルトの名無しさん2015/10/08(木) 21:05:21.80ID:idvE5Tw4
>>895
現時点での規格で駄目だとしてもそれが将来的に実現可能かどうか、妥当かどうかを考えてみるのは興味深い事だと思うよ
ただ、なぜか彼は偉そうで喧嘩腰なのがいただけないけど
0897デフォルトの名無しさん2015/10/08(木) 21:07:33.55ID:p4LiiGTw
婆ちゃんのために天ぷら揚げないで
0898デフォルトの名無しさん2015/10/08(木) 22:26:31.48ID:XT2XQMd7
>>874
>プログラムに必要なソースコードをグローバルな視点ですべて解析してから
>コード生成を開始するならテンプレートな仮想関数どころか
>もっととんでもない事が可能かも知れんが

ですよね
C#の生産性の高さを考えると、C++ももう少しユーザに優しくあってほしいと思うわけです
当方数値科学計算が仕事ですがC++歴は浅いので、戯れ言として聞き流してください
0899デフォルトの名無しさん2015/10/08(木) 22:40:21.99ID:ETVAEvki
>>874
>プログラムに必要なソースコードをグローバルな視点ですべて解析してから
>コード生成を開始するならテンプレートな仮想関数どころか
>もっととんでもない事が可能かも知れんが

あーそれかなり無理
任意のプログラムに対して有限停止問題が解けるというのと多分同義
0900デフォルトの名無しさん2015/10/09(金) 00:01:41.40ID:3NeJM4zm
かなり無理は不可能なのかそうでないのか
0901デフォルトの名無しさん2015/10/09(金) 00:08:18.42ID:GfpzmItO
必要なソースコードをグローバルな視点ですべて解析してからコード生成
と同等のことは他言語でやってること
0902デフォルトの名無しさん2015/10/09(金) 00:09:59.28ID:m6l+7vgz
言葉の意味まで変更してしまえば当然なんでも可能です
0903デフォルトの名無しさん2015/10/09(金) 00:21:28.96ID:IUqyiVrM
>>901
へえ、例えば?
そういう言語があるとしたらそれソースコード以外のライブラリが使えないんだけどそういう言語はインタプリタで実行するものしか知らんなあ
そういう言語は大抵そこを実行するときに他のソースを読み込むし
0904デフォルトの名無しさん2015/10/09(金) 00:23:34.66ID:m6l+7vgz
C#ではジェネリックなメソッドをオーバーライド出切るんだけど、
C#のジェネリックとC++のテンプレートは仕組みが違うからなぁ
0905デフォルトの名無しさん2015/10/09(金) 00:26:43.46ID:m6l+7vgz
C#はそこそこ頑張っているんじゃないのかねぇ
ヘッダファイルは無いし、複数のファイル間で相互参照があっても
うまいことコンパイルしてくれるって聞いたこと有るぞ
0906デフォルトの名無しさん2015/10/09(金) 06:57:51.96ID:VT/0EZUp
>>899
> 任意のプログラムに対して有限停止問題が解けるというのと多分同義

全然違うと思う
0907デフォルトの名無しさん2015/10/09(金) 09:59:13.28ID:4cEJzv4C
>>904
抽象でしかできないぞ
0908デフォルトの名無しさん2015/10/09(金) 13:36:37.06ID:IUqyiVrM
>>904
ググっても

エラー出るよ助けてよー
出来ないから別の方法使え

しか見つからなかったけど本当に出来るの?
0909デフォルトの名無しさん2015/10/09(金) 18:02:05.60ID:m6l+7vgz
「ジェネリック メソッド オーバーライド C#」
でググって一番上にあるのに何を検索したんだかww
あまりにも検索能力が低すぎて日常にも支障が有るレベルでは
0910デフォルトの名無しさん2015/10/09(金) 18:22:33.28ID:IUqyiVrM
>>909
ttp://qiita.com/monry/items/5a512cfedba665b09135
これのことじゃないよね?
0911デフォルトの名無しさん2015/10/09(金) 18:36:34.10ID:IUqyiVrM
ああ、ここのコメントに書いてあった
オーバーライドしてねえじゃんで読むの止めてしまったわ
0912デフォルトの名無しさん2015/10/09(金) 23:04:30.76ID:9aZeSACJ
いつも常に自分の足を撃たないように地雷原を歩いてる気がする
新機能がオアシスに見えて逃げ水どころか底なし沼だったり、何だこの、これ
0913デフォルトの名無しさん2015/10/09(金) 23:53:06.45ID:UhDsPJDp
もし生まれ変わって再びプログラミングの世界に入るとして、C++選ぶのかな?
0914デフォルトの名無しさん2015/10/10(土) 00:59:46.33ID:kmqm1hww
生まれ変われるとしたら(C+=2)-1かな
例外のクソすぎるところをやり直させてくれるベルダンディが降臨したら迷わず帰依する
0915デフォルトの名無しさん2015/10/10(土) 01:03:34.69ID:kmqm1hww
頼みもしないスタック巻戻しにくっついてくるRTTIだとか
バカ高いコストのくせに RESUME NEXT がないとか
0916デフォルトの名無しさん2015/10/10(土) 01:24:55.29ID:E0664ZmB
>>914-915
コストって何がどれだけあること言ってんの?実行時間?メモリ使用量?コードサイズ?
最近のコンパイラなら問題になることなんてほとんど無いと思ってるんだけど。
0917デフォルトの名無しさん2015/10/10(土) 01:33:54.53ID:kmqm1hww
ほとんど無いと思ってて
0918デフォルトの名無しさん2015/10/10(土) 01:46:30.25ID:E0664ZmB
>>917
答えられないってことは、どうせ迷信や10年前のコンパイラでの話を未だに信じてるだけなんでしょ?
0919デフォルトの名無しさん2015/10/10(土) 06:51:03.57ID:fP3IUTM/
resume nextってなんぞやとググったらVBかよ
0920デフォルトの名無しさん2015/10/10(土) 08:05:16.97ID:CCNhJ4kM
デフォルトのコピーコンストラクタやコピー代入演算子って
コピー時に各メンバに対して(ビットコピーではなく)
コピーコンストラクタやコピー代入演算子を呼び出すことは保証されてる?
ポインタを持たせても、生ポインタではなくshared_ptrを使う限りは
デフォルトのコピーコンストラクタやコピー代入演算子に任せても安全?
0921デフォルトの名無しさん2015/10/10(土) 08:25:34.33ID:QRzKPIbr
>コピー時に各メンバに対して(ビットコピーではなく)
>コピーコンストラクタやコピー代入演算子を呼び出すことは保証されてる?
そうか考えたこともなかった
>>920頭いいな
0922デフォルトの名無しさん2015/10/10(土) 08:29:34.25ID:fP3IUTM/
>>920
安全
0923デフォルトの名無しさん2015/10/10(土) 08:40:12.34ID:kmqm1hww
>>918
なんの今現在の話だよ
ちょっとやってみりゃすぐわかる馬鹿なこと聞くから相手してやんねーの
0924デフォルトの名無しさん2015/10/10(土) 08:50:45.32ID:fP3IUTM/
>>923
いいからVBつかっとけよ
0925デフォルトの名無しさん2015/10/10(土) 14:35:21.78ID:C2+tlbor
ちょっと調べればすぐ分かるから教えてやらない(震え声)

いい加減に適当に喧嘩をふっかけてそれを買うとすっとぼけるのはやめようよ
まったく意味のないトラブルばかり招くから…
0926デフォルトの名無しさん2015/10/10(土) 16:00:00.63ID:WQItE+Nd
VBと比較してる時点でどうせネットの風評信じて自分の目で
実際の正常系に影響与えてるかどうか検証してないだけだろう
さもなくばただの条件分岐に例外多用してるアレな人か
0927デフォルトの名無しさん2015/10/10(土) 16:53:49.17ID:E0664ZmB
>>923
ちょっとやってみりゃ↓こんな結果(-2.6%~+4.0%)になるだろうってのがわかってるんだよ。
http://preshing.com/20110807/the-cost-of-enabling-exception-handling/
この結果でも4年前のだしな。
0928デフォルトの名無しさん2015/10/10(土) 17:12:47.93ID:+pTteXD6
resume nextが欲しいと思う時点でやばい
0929デフォルトの名無しさん2015/10/10(土) 18:29:23.01ID:DZQ9wvWi
>>925
調べればじゃねえよ、やってみればだ
とぼけてるのはおまえだろ
怠け者め

なんで4年前の記事なんか引っ張んだよ
おまえがやれ、つーかできねえんならこの板ではROMってろ
0930デフォルトの名無しさん2015/10/10(土) 19:31:04.17ID:WQItE+Nd
>>929
やんのはオメーだろ
0931デフォルトの名無しさん2015/10/10(土) 20:43:07.08ID:DZQ9wvWi
なすり合いってことにしたいんなら
そうすれば?

おまえが何も得ないだけだし
0932デフォルトの名無しさん2015/10/10(土) 20:52:50.43ID:wZWPBuKi
擦り付け合いとかじゃなく、
お前がやれ
その結果は書き込まなくて良い
0933デフォルトの名無しさん2015/10/10(土) 20:53:39.88ID:WQItE+Nd
馬鹿じゃねーの?押し付けてんのはお前だろ
せめて自分で実際にやってから言えよクズ
0934デフォルトの名無しさん2015/10/10(土) 20:54:33.77ID:RukYXTRG
まあまあ
0935デフォルトの名無しさん2015/10/10(土) 21:14:34.91ID:LXdnro1p
えらそうに言う奴は先ずテメーのソースコードをここに貼ってみろや!
0936デフォルトの名無しさん2015/10/10(土) 21:31:15.08ID:PxJo6CPN
おらおらおらおらー
0937デフォルトの名無しさん2015/10/10(土) 21:43:47.39ID:0dTjLyRb
やめて!
俺のために戦わないで!
0938デフォルトの名無しさん2015/10/10(土) 23:11:33.18ID:6QuLtZGt
以上のような状態をセックスと定義します。

男同士でセックスするのはホモです。
従って>>929以降はホモ野郎という事になります。

気持ち悪い。
0939デフォルトの名無しさん2015/10/10(土) 23:20:00.07ID:9fj3wNmr
>>938
その定義だとお前もって事になるけど大丈夫?
09409342015/10/10(土) 23:38:35.56ID:pverhzbk
まず「以上のような状態」を定義してくれ
なぜ俺はホモ疑いに巻き込まれたんだ
0941デフォルトの名無しさん2015/10/10(土) 23:40:41.29ID:0dTjLyRb
通常の定義と全く異なる俺定義を展開されても
しかも言葉のすり替えでホモに結論づけするとは悪質だな
0942デフォルトの名無しさん2015/10/11(日) 01:48:42.13ID:XDL1o532
homoとhogeって似てるな
0943デフォルトの名無しさん2015/10/11(日) 02:35:14.49ID:cdE875Rm
C++書く人達って無駄に攻撃的な人多いね
0944デフォルトの名無しさん2015/10/11(日) 03:49:40.51ID:Nau1HDji
C++技術者にも色々いるだけだ
0945デフォルトの名無しさん2015/10/11(日) 04:00:43.62ID:PVe4pURO
ID:kmqm1hww
とかVBだしな
C++に限らない
0946デフォルトの名無しさん2015/10/11(日) 04:51:42.92ID:gSJDxW7y
おっと江○添の悪口はそこまでだ
0947デフォルトの名無しさん2015/10/11(日) 15:18:32.98ID:OMjxUQhq
ごちゃごちゃ言ってないでしゃぶれよ
0948デフォルトの名無しさん2015/10/11(日) 21:07:53.47ID:WBYIj+O0
VBだっておバンバン
それWindows世代だろw
0949デフォルトの名無しさん2015/10/12(月) 06:25:32.18ID:b39cwc+L
>>942
ソフトウェア商品のグレードなんかの
Home Edition てのも Homo Edition に似てるね。
0950デフォルトの名無しさん2015/10/12(月) 12:18:52.11ID:eT/PtTP3
なんだそのクリックすると喘ぎ声が出そうな製品
0951デフォルトの名無しさん2015/10/15(木) 18:00:35.40ID:ouSN4Vlw
std::coutというか,basic_ostreamのoperator>>についての質問?なんですが,
javaの課題をC++でやってみようとおもって,まだ途中なんですが以下のコードを書きました.
http://codepad.org/DdMr0gro

これをVS2015環境下でデバッグ実行すると,コマンドライン上に
 [test]
と書かれるはずが
 ] est
つまり,basic_ostreamのイテレータ?が最初に戻ってしまう現象が現れました.
(コマンドライン引数には data/test.txt を指定して,dataフォルダに
「test」と書かれたtest.txtを配置しています.)
おそらくifstreamかgetline()が原因なんだと思いますが,cinとcoutの同期が
原因かなと思ってtieしても解決しませんでした.
なにが原因でこうなってしまうんでしょうか?
0952デフォルトの名無しさん2015/10/15(木) 18:16:39.48ID:KCAkXS7a
ソース読んでないが、テキストファイル側にbom付いてるだけじゃね
0953デフォルトの名無しさん2015/10/15(木) 18:20:47.78ID:aH9tdNzV
ios::binaryで読んでるから\r\nが\nに変換されずに読みこまれてる
coutに\rを入れるとその行の先頭にカーソルが移動する
0954デフォルトの名無しさん2015/10/15(木) 18:43:29.57ID:ouSN4Vlw
なるほど,改行コードのことだとは気付きませんでした.
となると,自分で取り除くか,binaryではなく,ios::inにするとよさそうですね.
ありがとうございました.
0955デフォルトの名無しさん2015/10/15(木) 20:43:14.49ID:Z5UOv0gP
ストリームはクソだわ
0956デフォルトの名無しさん2015/10/15(木) 20:59:33.37ID:kRNzdeWM
そこでHaskellですよ。
0957デフォルトの名無しさん2015/10/15(木) 21:31:42.27ID:Pl/e/d+4
Javaの課題を写したんなら当然だがc++らしくないな
いっそ元の問題を晒してみたら?
だれかかっこいいc++を書きてくれるかもよ
0958デフォルトの名無しさん2015/10/15(木) 22:21:39.39ID:eGvButUC
>>956
IOは副作用がある (キリッ
0959デフォルトの名無しさん2015/10/15(木) 22:39:21.45ID:4rmzgbky
>>958
そこでモナドですよ(キリッ
0960デフォルトの名無しさん2015/10/15(木) 23:43:57.69ID:KCAkXS7a
っ ::fscanf
0961デフォルトの名無しさん2015/10/16(金) 00:21:52.64ID:yFhNulgB
std::fscanfでなく::fscanfを薦める奴に
ロクな奴はいない
0962デフォルトの名無しさん2015/10/16(金) 01:22:34.18ID:MCA6CYcJ
extern "C" int fscanf(FILE*, const char* ...);
namespace std {
using ::fscanf;
}
0963デフォルトの名無しさん2015/10/17(土) 08:30:18.81ID:15bBcd+N
可変長引数って
func(const char *s, ...)
func(const char *s ...)
どっちが正しいの?
0964デフォルトの名無しさん2015/10/17(土) 11:43:59.18ID:U1ERA7pu
#include <iostream>
using namespace std;
template<typename ...T>
auto f(T...x){
for(int i:x...)
cout<<i<<endl;
};
int main()
{
f(1,2,3);
return 0;
}

昔こういうことが出来たような気がするんですが
どうやるのか忘れました
教えてください
0965デフォルトの名無しさん2015/10/17(土) 12:19:44.07ID:e8xa7PiS
>>963
どちらも正しい
0966デフォルトの名無しさん2015/10/17(土) 12:28:14.71ID:e8xa7PiS
>>964
for (int i: {x...})
initializer_listを構築してそれをイテレートする
0967デフォルトの名無しさん2015/10/17(土) 12:50:24.84ID:U1ERA7pu
ありがとうございます
0968デフォルトの名無しさん2015/10/20(火) 18:25:41.85ID:3vGCFixJ
ファイルから指定文字列を検索したい。以下のコードだとsearchが実行時にエラーExpression: istreambuf_iterator is not dereferencable
ifstream f("Text.txt");
string s("is");

istreambuf_iterator<char> eof;
eof == search(
istreambuf_iterator<char>(f.rdbuf()),
//f.rdbuf(),
eof,
s.begin(),
s.end())
);

VS2013です
どうすればいいですか
0969デフォルトの名無しさん2015/10/20(火) 20:46:00.53ID:8yDPqMwa
http://cpprefjp.github.io/reference/iterator/istreambuf_iterator.html
-------引用開始-------
istreambuf_iteratorは、operator++()でイテレータを進めることにより、ストリームバッファのsbumpc()メンバ関数でストリームからデータを読み込む入力イテレータである。
ストリームからのsgetc()メンバ関数による読み取りがTraits::eof()を返した場合に、イテレータはendイテレータと等しくなる。
-------引用終わり-------

って事で、1文字ずつしか読み込まないのでは?
0970デフォルトの名無しさん2015/10/20(火) 21:44:27.08ID:RWFAio1T
eofに代入してないね
等値比較して結果を捨ててる
0971デフォルトの名無しさん2015/10/20(火) 21:51:20.77ID:wM4Y4a1V
>>968
案1
ファイルの内容を全部stringに読み込んでfindする

案2
ファイルの内容を全部stringに読み込んでregexする

案3
外部コマンドとしてgrepとかawkとかsedをインストールしておいてc++から起動する


お好きな方法でどうぞ
0972デフォルトの名無しさん2015/10/20(火) 22:01:04.78ID:82Xf4s6u
std::searchはForward Iteratorを要求するから
Input Iteratorのistreambuf_iteratorを渡してもだめだわさ

std::findならInput Iteratorでいいから一文字目だけをfindで見つけて
二文字目以降は別にチェックするとか
09739682015/10/20(火) 23:37:01.59ID:3vGCFixJ
ありがとう
試行錯誤してみるよ
0974デフォルトの名無しさん2015/10/20(火) 23:46:27.98ID:Kav8lZYy
>>973
一番簡単なのはstd::stringクラスのfindで
一番応用が利くのはstd::regex系を使いこなすこと
だと思うな
0975デフォルトの名無しさん2015/10/21(水) 00:48:57.67ID:k2x/6pgE
#include <iostream>
#include <fstream>
#include <iterator>
#include <cstdlib>

int main(int argc, char** argv) {

std::ifstream ifs("src/main.cpp");
std::istream_iterator<char> is(ifs);
std::istreambuf_iterator<char> ibf(i
fs);
std::istreambuf_iterator<char> ibf_e
of;

std::string istr(ibf,ibf_eof);
std::cout << istr.find("std");

return EXIT_SUCCESS;
}
0976デフォルトの名無しさん2015/10/21(水) 01:47:07.42ID:k2x/6pgE
あ、すまん。std::istream_iterator<char> is(ifs); この行不要な
それとcoutの最後にはstd::endlつけてやってくれ
0977デフォルトの名無しさん2015/10/22(木) 13:25:09.22ID:3HJoxiXv
ベクトルのコピーで検索すると
ベクトル同士をコピー代入演算子でコピーするのが一番簡単なきがするのですが
違うやり方ばかり出てくるのはなぜですか?
これがまちがっているということですか?
0978デフォルトの名無しさん2015/10/22(木) 13:34:38.59ID:TivbSMZT
まちがってないで
0979デフォルトの名無しさん2015/10/22(木) 13:47:47.59ID:3HJoxiXv
ありがとうございます
0980デフォルトの名無しさん2015/10/22(木) 13:55:49.77ID:CPFSlH5N
違うやり方ってのはstd::vector::assignでbeginからendまでコピーとか?
それのメリットはvector以外の型からもコピーできることかね
0981デフォルトの名無しさん2015/10/22(木) 15:52:01.07ID:wxGQnodN
>>977
単純なコピーの需要が少ないのでは?
単純コピーなら参照でも十分だし

コピーするのは何かを変更したいからワザワザコピーしてを作るわけで
変更するならコピーするタイミングでやるのが簡単だからとか??

あと、要素に参照とかポインタが含まれている場合
シャローコピーになっちゃうわけで参照先の管理が面倒くさくなっちゃう
ディープコピー作るなら一工夫必要だしね
0982デフォルトの名無しさん2015/10/22(木) 16:46:09.18ID:UnQTPRBv
vectorの便乗質問ですが、reserveされてしまった余分な容量を削除する方法としてswap技法
std::vector<T>(x).swap(x)
がありますが、これは一時オブジェクトは全く作成されないのですか?
無名オブジェクトとはいえコンストラクタを呼んでいるわけですから、作成されてるような気がするのですが
0983デフォルトの名無しさん2015/10/22(木) 17:44:22.04ID:TivbSMZT
されてるよ
0984デフォルトの名無しさん2015/10/22(木) 18:39:56.40ID:UnQTPRBv
>>983
ありがとうございます。やはり作成されるのですね

vectorの容量をシュリンクする効率的な方法としてswap技法を紹介してる人を目にしますが、
コードはシンプルになるものの処理効率が上がるわけではないですよね
0985デフォルトの名無しさん2015/10/22(木) 18:43:29.83ID:TivbSMZT
>>984
swap技法以外に、方法なくない?
0986デフォルトの名無しさん2015/10/22(木) 18:49:05.63ID:+o7cqPdB
>>981 は質問の意図をまったく把握してないから無視していいと思う

>>984
複雑で効率的な方法示してみなよ。無いから。
0987デフォルトの名無しさん2015/10/22(木) 18:53:09.88ID:UZ6K9ouN
自作のベクタークラスを作る
サイズを縮小する場合はreallocを使う
0988デフォルトの名無しさん2015/10/22(木) 18:56:31.41ID:IiO/at8e
shrink_to_fit()
0989デフォルトの名無しさん2015/10/22(木) 18:59:03.48ID:E1Ocrnf5
最初から必要なサイズを確保すればいい。
0990デフォルトの名無しさん2015/10/22(木) 20:19:27.23ID:gQOdFLsP
春よこい
0991デフォルトの名無しさん2015/10/22(木) 21:33:39.08ID:OXupIzBk
次スレ

C++相談室 part120
http://peace.2ch.net/test/read.cgi/tech/1445516998/
0992デフォルトの名無しさん2015/10/22(木) 21:55:12.08ID:kinLxVE3
>>989
必要なサイズがわかってるなら単なる配列でよくね?
0993デフォルトの名無しさん2015/10/22(木) 22:15:13.77ID:TKCRaEBU
>>992
だったら君は配列だけ使ってれば?
0994デフォルトの名無しさん2015/10/22(木) 22:43:30.77ID:kinLxVE3
>>993
必要なサイズがわかってるなら、そうしてますが何か?
0995デフォルトの名無しさん2015/10/22(木) 23:19:22.19ID:OwqJeF9X
必要なサイズがわかっててもvectorなドアホがいたw
0996デフォルトの名無しさん2015/10/22(木) 23:21:34.94ID:plnHfgiP
ポインタでも参照でもない変数って
仮想関数呼んでも呼ばれる関数が静的に決まるよね
このときもvtable経由で呼ばれる?(仮想関数の呼び出しオーバーヘッドがある?)
それともオーバーヘッド0で呼ばれる?
それとも未定義? 最適化次第?
0997デフォルトの名無しさん2015/10/22(木) 23:21:45.47ID:4GjtJ8Lk
「わかる」タイミングの問題だ
0998デフォルトの名無しさん2015/10/22(木) 23:22:03.08ID:l1df8Qjo
vectorって配列に比べてそんなにオーバーヘッドあるか?
0999デフォルトの名無しさん2015/10/22(木) 23:24:06.05ID:Y4jcRaLX
スタック容量を減らすならarray < vector
1000デフォルトの名無しさん2015/10/22(木) 23:33:55.59ID:rvBOfPQs
>>995
それをドアホというお前さんこそドアホである可能性
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
10021002Over 1000Thread
2ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 2ちゃんねる専用ブラウザからの広告除去
★ 2ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
http://premium.2ch.net/
http://pink-chan-store.myshopify.com/
レス数が1000を超えています。これ以上書き込みはできません。