[英]C++ assignment works with deleted assignment operator?
我有一段代碼看起來像這樣:
class B
{
private:
const A& obj;
size_t val;
// private - prohibited
B& operator=(const B& other);
public:
B(const A& obj_): obj(obj_)
{
val = 0;
}
};
class C
{
void func()
{
A a1;
B b1(a1);
B b2 = b1; // should throw error?
}
}
Class B
有一個私有的賦值運算符。 盡管如此, C::func()
賦值C::func()
編譯而不會出錯。 但是如何?
B b2 = b1
不使用賦值運算符,因為它不是賦值 ,而是復制初始化 -使用構造函數,而不是賦值運算符。
另請參閱復制初始化
那是拷貝構造函數被調用,而不是賦值運算符。
原因是在初始化變量時,將調用構造函數(在本例中為復制構造函數)。
B b2 = b1; // construction
這與作業不同
b2 = b1; // b2 is already declared, so assignment
若要停止此行為,只需刪除您的副本構造函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.