2016-10-11 70 views
6

我有問題,這是什麼意思返回像我的代碼示例中的賦值表達式?我有一個枚舉,並且我覆蓋了++:操作符。所以我可以在簡短的例子中在ligths之間切換 - 但是我不明白代碼中有一部分。代碼編譯和工作正常。賦值運算符在返回語句中意味着什麼,如return t = ...?

代碼:

enum Traficlight 
{green, yellow, red }; 

Traficlight& operator++(Traficlight& t) 
{ 
    switch (t) 
    { 
    case green: return t = Traficlight::yellow; //Here <-- 
    case yellow: return t = Traficlight::red; //Here <-- 
    case red: return t = Traficlight::green; //Here <-- 
    default: 
     break; 
    } 
} 

int main() 
{ 


    Traficlight Trafic = Traficlight::green; 
    Trafic++; 

    if (Trafic == Traficlight::yellow) 
    { 
     cout << "Light is Yellow" << endl; 
    } 

    string in; 

    cin >> in; 

} 

什麼是 「返回T = Traficlight ::黃」 的意思,爲什麼不能我只是返回 「Traficlight ::黃」。

+0

有關賦值運算符的返回值的更多信息,請參見:http://stackoverflow.com/questions/14697643/low-level-details-of-cc-assignment-operator-implementation-what-does- it-retu –

+3

與t = x相同。返回x;'。 – 0x499602D2

+1

這段代碼沒有編譯:你可以定義preincrement'operator ++',但是使用postincrement'operator ++'。 – aschepler

回答

5

在返回指令中,操作員分配給t哪一個是引用(修改它)然後返回值。

這就是增量運算符所做的:修改&同時返回引用,因此增加後的值可用於其他操作。

0

它將值分配給t變量(並且在您的代碼中t是引用類型,因此外部可見變化),然後返回值爲t變量。

3

t = Traficlight::yellowTraficlight::yellow寫入t。該表達式的結果也Traficlight::yellow,所以這樣的:

return t = Traficlight::yellow; 

等於:

t = Traficlight::yellow; 
return t; 

在上面的功能,參照t接收作爲參數,所以改變t值是在事實相關。

2

你的函數引用接收參數:

Traficlight& operator++(Traficlight& t) 

它是一個++運算符,因此語義就必須增加它的操作數,然後返回參照操作數。所以,你必須做兩個動作:

// Assign new value to the t 
t = Traficlight::yellow; 
// Return rusult 
return t; 

這可以在一行中寫入,因爲賦值運算符返回指定的值。

相關問題