C 编译器有错误,但 C++ 编译器没有错误

问题描述 投票:0回答:2
int a=5;
++a=a;

请找到上面的代码段。该代码对于 c++(g++) 编译器来说没问题,但在使用 c (gcc) 编译器时显示错误。我可以知道这是什么原因吗? C 编译器中的错误是“需要左值作为赋值的左操作数”。

c++ c compiler-errors
2个回答
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;

1
投票

因为在 C++ 中,预自增运算符产生左值,而在 C 中,它是右值。

© www.soinside.com 2019 - 2024. All rights reserved.