我有這樣的例子的代碼:的std ::移動到功能
#include <iostream>
class Struct {
public:
Struct() { std::cout << "0" << std::endl; }
Struct(Struct&) { std::cout <<"1"<<std::endl;}
Struct(const Struct&) { std::cout << "2" << std::endl; }
};
class Struct2 {
public:
Struct s;
Struct2() {}
void setMember(const Struct& aux) { s = aux; }
};
int main()
{
Struct s;
Struct2 s2;
s2.setMember(s);
}
// http://coliru.stacked-crooked.com/a/dd57e8af23f6db4b
懷疑1:
據printting 2 0,因爲在主構造和部件的構造Struct2的。
事情是,我期待三個0,因爲「setMember」正在接收's'的副本,對吧?那麼發生了什麼?
疑點二:
我想在把這個:
s2.setMember(std::move(s));
正如我不會用 'S' 一遍,但setMember不具有 '& &' 規定,可以嗎?我也必須這樣做嗎? :
s = std::move(aux);
或者只是主要的一個就足夠了?
疑點三:
std::vector<A> vectorA;
int main()
{
A a;
// modifies a ...
vectorA.push_back(std::move(a));
}
它是正確的嗎?我是否在優化移動'a'的任何內容?它不會再被使用,我想保持它在矢量
感謝
傳遞爭論作爲參考的參考是與作爲值(複製)傳遞完全相反的。在這裏,您的c.tros中沒有一個通過值來傳遞參數。 –
如果你不理解傳遞引用機制,也許你應該在移動語義之前閱讀更多關於基本C++的知識。 – undu