この理由:明示的に削除された移動コンストラクタ
error: use of deleted function ‘A::A(A&&)’
そして、私はそのような動きのコンストラクタを追加するとき
A(A&&) {
cout << "move constructor" << endl;
}
それがうまくコンパイルが、なぜプログラムの開発年代:
struct A
{
A(int) {
cout << "construct from int" << endl;
}
A(A&&) = delete;
A(const A &) {
cout << "copy constructor" << endl;
}
};
int main(){
A a = 0;
}
は私にエラーを与えます出力はちょうど
です私が理解する限り、コンパイラはコンストラクタを要求しますが、それを使用しません。どうして?これは私には意味がありません。
P.S.私は
A a = 0;
が
A a = A(0);
のequvalentですが、なぜどちらも移動コンストラクタや移動代入演算子が呼び出される?と仮定しますか
によると? – Brotcrunsher
これはC++ 17で変更されました(削除された移動コンストラクタは現在コンパイルされています)。しかし、copy/move elisionは常に前のことでした。 – chris
私はg ++ 4.9、g ++ 6.3、clang 5.0を試してみました。 (-O0 -std = C++ 11) –