0
#include <iostream>
class A {
public:
A() { std::cout << "Constructor" << std::endl; }
A(const A& a) { std::cout << "Copy Constructor" << std::endl; }
A& operator=(const A& a) { std::cout << "Copy = operator" << std::endl; }
A(A&& a) { std::cout << "Move Constructor" << std::endl; }
A& operator=(A&& a) { std::cout << "Move = operator" << std::endl; }
~A() { std::cout << "Destructor" << std::endl; }
};
void f(A&& a) { std::cout << "function" << std::endl; }
int main() {
f(A());
return 0;
}
でコンパイルした場合でも発生するようですかコピーの省略は、次のプログラムの出力は-fno-Elideの-コンストラクタ
私は驚くほど愚かですか?確かに 'A()'がデフォルトのコンストラクタを呼び出すと、匿名のテンポラリは 'f(A &&)'にバインドできます。私は何が欠けていますか?移動コンストラクタは、構築されたオブジェクトを持つ場合にのみ呼び出すことができます。 – Bathsheba
@Bathsheba:私は何かが足りないとは思わない。 'A foo();'が与えられていると、 'A {{foo()};}は移動コンストラクタを呼び出しますが、そのまま移動することはありません。 –
@Bathsheba "私は何が欠けていますか?"私は知らない...良い品質の個人的な時間?多分、寝ることもありますか? (私に気を付けてはいけません。周りにうずくまります。フレンドリーな冗談、悪意のある人はいません)。 –