問。C++0xにおけるconst教(ローカル変数をはじめとした全ての変数に対し、値を変更しない場合にはconstを付ける習慣)の弊害を述べよ。
2011-01-17 00:45:33標準に movable<T> とか欲しいんだよにゃ。基本 T const として扱えて、 move するときだけ破壊的変更が可能な型。
2011-01-17 00:57:32日記書いた: C++0x 標準ライブラリ完全解説 ~ No.02 std::move, <utility> http://d.hatena.ne.jp/gintenlabo/20110116/1295195945
2011-01-17 02:13:50結局、超初心者向け解説に。 && が一度も登場しない rvalue reference 解説記事って地味に史上初じゃなイカ?
2011-01-17 02:15:13http://cpplover.blogspot.com/2011/01/c0x.html こういう記事は増えてほしいにゃー。
2011-01-17 02:24:49C++ の関数における引数の型は、引数を書き換えない場合には T const& を、引数経由で値を戻したい場合は T& を、引数を書き換えたいけど引数経由で値を戻したくない場合には T を、それぞれ使うのが良い。
2011-01-17 02:32:07move ctor/move assign あるいは Perfect Forwarding 以外の場面で、 T&& を引数とした関数を定義することは、まず無い。
2011-01-17 02:33:07move ctor/move assign あるいは Perfect Forwarding 以外の場面で、 T&& を引数とした関数を定義することは、まず無い。
2011-01-17 02:33:07そして move ctor/move assign は、よっぽどのことがない限り、コンパイラによって自動生成されたものをそのまま使うほうが、間違いがなくて良い。結果として、 T&& を引数に取る関数が、ユーザコードに現れるようなことは、滅多に無い。
2011-01-17 02:36:11Perfect Forwarding の弊害: 関数呼び出し f(x); の候補として、 template<class T> void f( T&& ); という関数と、 class X; void f( X const& ); という関数が見つかったとする。
2011-01-17 02:39:49ここで、もし f(x); の x が、 X x; って宣言された変数 x だった場合、後者の void f( X const& ); ではなく、前者の template<class T> void f( T&& ); が呼ばれます。
2011-01-17 02:40:59コード: http://ideone.com/bNxIG これが ADL と組み合わさると、コンパイルエラーにならないまま妙な動作を行う事になり、非常に危険。
2011-01-17 02:43:24Perfect Forwarding を使う際は、これらの危険を把握した上で使いましょう。 C++ 氏ねこかわいい。
2011-01-17 02:46:19@bolero_MURAKAMI ユーザ定義のデストラクタがある場合には自動生成されません。あと、これは元からですが、コピーコンストラクタとコピー代入演算子がある場合もです。
2011-01-17 03:23:43@SubaruG どうもです。ユーザ定義デストラクタがある場合のデフォルトコピーコンストラクタは deprecated になったそうですが、合わせる形に落ちついたんですね。
2011-01-17 03:26:09