簡體   English   中英

C ++賦值與刪除的賦值運算符一起工作嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM