2013-05-09 158 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;