簡體   English   中英

類構造函數比“ =”運算符具有更高的優先級?

[英]Class constructor has more priority over the “=” operator?

我重載了運算符“ =”以執行某些操作,但是它使用了構造函數

class Date
{public:
    int x;
public:
    Date(int v1)
    {
        x = v1+1;
    }
    Date& operator=(Date& d)
    {
        x = x - 1;
    }
public:
    ~Date() {};
};

int main()
{
    Date d = 1;
    cout << d.x;
    //delete d;
    return 0;
}

我原本希望打印0,但它會打印2(使用構造函數)。 這是為什么? 還有為什么不讓我刪除d? 它說它必須是指向完整對象類型的指針。

應該優先考慮,因為這

Date d = 1;

不是賦值 ,而是帶有初始化的對象聲明。 C ++中類對象的初始化是構造函數的領域。 不要讓語法(使用= 1作為初始化程序)使您感到困惑。

要調用賦值運算符,左側必須是已進行初始化的現有對象。 分配僅適用於預先存在的對象。 因此,如果添加這樣的語句:

d = 1;

它可以按您期望的方式調用賦值運算符(在修復了其他一些錯誤之后)。

還有為什么不讓我刪除d? 它說它必須是指向完整對象類型的指針。

該錯誤對我來說似乎很容易解釋。 您只能在指針操作數上調用delete。 並且指針必須指向先前使用new創建的對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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