2013-05-09 156 views
1
int a=5; 
++a=a; 

請找到上面的代碼段。該代碼適用於C++(g ++)編譯器,但在使用c(gcc)編譯器時顯示錯誤。我可以知道這個的原因嗎? c編譯器中的錯誤是「作爲賦值的左操作數需要左值」。C編譯器錯誤,但不是C++編譯器中的錯誤

+0

在C++中一個是指一個值不是一個變量不確定C++ – bikram990 2013-05-09 05:29:54

+0

相關:http://stackoverflow.com/questions/3690141/multiple-preincrement -al-variable-in-cc – 2013-05-09 05:30:23

回答

1

因爲在C++中,preincrement運算符產生一個左值,而在C中,它是一個右值。

+0

標準證明? – MOHAMED 2013-05-09 05:30:41

+0

「在C++中,預增量運算符產生一個左值,而在C中,它是一個右值」。爲什麼這樣呢? – akhil 2013-05-09 05:31:49

+2

@akhil因爲兩種語言不同。 (這只是一個設計問題,C++標準委員會做出的決定與C的決定不同)。 – 2013-05-09 05:32:26

2

在C++中有運算符重載(也可以重載預增量),所以爲了實現一些額外的目標,預增值運算符在C++中返回左值。

例如:

你的類可以實現一些指針功能,並且可以需要:

  • 預增量指針移位;
  • 賦值運算符用於賦值爲指針值(由地址賦值)。

在此情況下,預增量可能會有用。

摘要代碼例如:

class MyIntPtr { 
    int *val; 
    ... 
public: 
    MyIntPtr(int *p) { ... }; 
    MyIntPtr &operator++() { ++val; return *this; }; 
    void operator=(int i) { *val = i; } 
    ... 
}; 

... 

int array[10]; 
MyIntPtr ptr(array); 

for(int i = 0; i < sizeof array; ++i) 
    ++ptr = i;