2
我有這樣的結構Rvalue構造函數沒有被調用?
struct A {
A() { cout << "Default\n"; }
A(const A& a) { cout << "Const lvalue\n"; }
A(const A&& a) { cout << "Const rvalue\n"; }
A(A& a) { cout << "Lvalue\n"; }
A(A&& a) { cout << "Rvalue\n"; }
};
我使用的是理解右值/左值它。
在做
A a1;
A a2{ a1 };
const A a3;
A a4{ a3 };
它正確地輸出
> Default
> lvalue
> Default
> Const lvalue
的問題是,當我這樣做
A a{ A() };
輸出是默認。但是不是A()
有一個右值嗎?必須不要調用A::A(A&&)
或A::A(const A&&)
?這裏發生了什麼?
請允許我爲你指點['標準:: move'(http://en.cppreference.com/ w/cpp/utility/move) – InternetAussie
謝謝,解決了這個問題,但是爲什麼在這個例子中我沒有給任何構造函數調用? – Garmekain
複製構造函數不一定會被調用。在這種情況下,編譯器可能會在不復制的情況下直接創建'A()'來代替'a'。 – zoska