繁体   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