2013-09-28 32 views
1

下面的代碼給這個錯誤:錯誤:左值要求作爲遞增操作數

int main() 
{ 
    int i = 4, j=10; 
    int k, l; 

    k = ++ (++ i); 
    l = (j++) ++; 

    cout << "k : " << k << endl; 
    cout << "l : " << l << endl; 

    return 0; 
} 

這將是非常有益的,如果有人可以解釋爲什麼會發生錯誤。

+0

我看到大學賽季又開始了。兩行都是**未定義的行爲**。但是既然你不會在現實生活中編寫這樣的代碼,爲什麼爲什麼要問。不要這樣寫代碼。 –

+0

@Loki One只是不合格。另一個總是習慣於未定義的行爲,但我不確定它現在是什麼;規則在C++ 11中改變了。我同意,但不應該這樣做。 –

回答

2

因爲當你編寫X ++時,X必須是一個變量,X必須是你正在增加的東西。所以(j++) ++是一個錯誤,因爲(j++)不是一個變量。改爲寫j += 2

請注意有經驗的程序員,我知道這是一個非常簡單的過程。

+0

你的文章間接地說'(++ i)'是一個變量 – P0W

+0

@ P0W怎麼樣?我只提到j ++而不是++ i。 – john

+0

@john因爲'(++ i)++'不是一個錯誤,所以你提出這個可能的唯一方法就是如果'++ i'是一個變量。 –

5

j++的結果是j的舊值,而不是對j的引用。您不能對其應用另一個增量,因爲您無法增加值。

+1

(而'++ i'增加'i'並且返回一個對變量本身的引用,所以你可以再次增加它,但是在同一個事物上使用多個增量操作符可能會導致問題;最好不要這樣做) –

+1

只適用於標量類型。如果你編寫你自己的類並重載'operator ++(int)','(j ++)++;'可以是合法的。 – jrok

2

只要寫j + = 2。爲什麼你以錯誤的方式使用operator ++? 套用KISS。

相關問題