簡體   English   中英

C編譯器出錯,但c ++編譯器出錯

[英]Error in C compiler but not in c++ compiler

int a=5;
++a=a;

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

在C ++中有運算符重載(並且你也可以重載預增量),因此為了實現一些額外的目標,預增量運算符在C ++中返回lvalue。

例如:

您的類可能實現一些指針功能,可能需要:

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

在這種情況下,預增量可能是有用的。

抽象代碼示例:

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;

因為在C ++中,preincrement運算符產生左值,而在C中,它是rvalue。

暫無
暫無

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

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