- C++相談室 part114
616 :デフォルトの名無しさん[sage]:2014/11/22(土) 06:15:25.58 ID:18N8Upow - >>614
配列の宣言: std::size_tに変換可能な型 配列のインデックスアクセス:整数 ポインターの加減算:integral type 「integral type」はchar,intなどの整数型に加えwchar_t,bool などを含む。
|
- 【初心者歓迎】C/C++室 Ver.93【環境依存OK】
826 :デフォルトの名無しさん[sage]:2014/11/22(土) 06:23:30.95 ID:18N8Upow - >>823
>どのあたりが分っていないように見えますか? newしたときに確保されるのは実メモリでなく仮想メモリだ。 仮想メモリにアクセスした際に実メモリへの割り当てが透過的に行われるけど 断じて「new=物理メモリ確保」ではない。 その証拠に搭載メモリより多くのメモリをnewする事が出来る
|
- C++14/C++1z 20
67 :デフォルトの名無しさん[sage]:2014/11/22(土) 12:06:41.75 ID:18N8Upow - autoとdecltype周りはキーワードの使い回しが激しくて嫌です。
decltype(x) y; // 特定の型として使用 [](auto p){} // ジェネリックラムダです auto y=x; // xから察して decltype(auto) y=x; // decltype(x)から推論 auto f() -> int {} // 型の定義は後ろを見て auto f() -> decltype(auto) {} //returnから推論
|
- C++14/C++1z 20
71 :デフォルトの名無しさん[sage]:2014/11/22(土) 19:41:44.85 ID:18N8Upow - >>69
decltype(x)は 1.xが識別子っぽい時、その宣言をコピペ 2.識別子でないけどlvalue/rvalueの時はT&/T&& 3.それ以外は式xの型T ↓こんな感じ。 const struct A { int &&v; } obj; auto v2= obj.v; // int decltype(obj.v) v2; //1に該当。int&& decltype((obj.v)) v2;//カッコが付いて識別子でないので2に該当。const int & int &f(); auto v2=f();//int decltype( f() ); v2=f();//lvalueなので2に該当。int & decltype( make_str() ) s=...; // prvalueなので3に該当。string decltype( (const std::string)make_str() ) s=...; // 3に該当。const string
|
- C++14/C++1z 20
72 :デフォルトの名無しさん[sage]:2014/11/22(土) 19:42:51.01 ID:18N8Upow - ごめん間違えた
誤 識別子でないけどlvalue/rvalueの時はT&/T&& 正 識別子でないけどlvalue/xvalueの時はT&/T&&
|
- C++14/C++1z 20
73 :デフォルトの名無しさん[sage]:2014/11/22(土) 19:59:50.92 ID:18N8Upow - 典型的な違いをもう一つ。
void f(int && v) { auto v1 = v; // int decltype(auto) v2 = v; //宣言をコピペしてint && (この場合コンパイルエラー) decltype(auto) v3 = (v); //式(v)は左辺値なのでint & }
|