[英]priority of implicit conversion over template constructor and assignment operator for transparent lazyness
[英]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.