- C++相談室 part119 [転載禁止]©2ch.net
520 :デフォルトの名無しさん[sage]:2015/09/26(土) 13:19:28.92 ID:uKQbY5Ux - A a = A();
ってやったとき ・単にaが構築される ・右辺が構築されてから左辺のコピー(ムーブ)コンストラクタが呼ばれる ・左辺と右辺がそれぞれ構築されてから左辺のコピー(ムーブ)代入演算子が呼ばれる どれ? デバッガで追ってみるとコピー(ムーブ)コンストラクタ/代入演算子は呼ばれてないから ・単にaが構築される のはずなんだけど コピー(ムーブ)コンストラクタ/代入演算子がないクラスでこれやると なぜかエラーが出るんだよね A &a = A(); ってやるとコンパイル通るけどMSVCの独自拡張みたい? 素直に A a(); ってやればいいんだけど A *a = new A(); ってやったときとシンタックスの一貫性がなくて微妙。 (常に 変数 = コンストラクタ の形にしたい) あと関数宣言として解釈されることがあってイライラ。 標準規格とかでどう定義されているのかとか、説明できる方がいたら教えて下さい。
|
|