C++ C编译器中出现错误,但C++;编译程序
请查找上面的代码段。代码对于c++(g++)编译器来说是正常的,但在使用c(gcc)编译器时显示错误。我可以知道原因吗?C++ C编译器中出现错误,但C++;编译程序,c++,c,compiler-construction,compiler-errors,C++,C,Compiler Construction,Compiler Errors,请查找上面的代码段。代码对于c++(g++)编译器来说是正常的,但在使用c(gcc)编译器时显示错误。我可以知道原因吗? C编译器中的错误是“左赋值操作需要的LValuy”。< P>因为在C++中,预增量运算符产生一个LValk,而C中的值是rValue.< /P> < P> C++中存在操作符重载(并且也可以超载预增量),所以为了实现一些额外的目标,预增量操作符在C++中返回LValuy。 例如: 您的类可能实现一些指针功能,并且可能需要: 指针移动的预增量 赋值运算符,用于赋值到指针值(由
C编译器中的错误是“左赋值操作需要的LValuy”。< P>因为在C++中,预增量运算符产生一个LValk,而C中的值是rValue.< /P> < P> C++中存在操作符重载(并且也可以超载预增量),所以为了实现一些额外的目标,预增量操作符在C++中返回LValuy。 例如: 您的类可能实现一些指针功能,并且可能需要:
- 指针移动的预增量李>
- 赋值运算符,用于赋值到指针值(由地址指定的值)
int a=5;
++a=a;
类MyIntPtr{
int*val;
...
公众:
MyIntPtr(int*p){…};
MyIntPtr&operator++(){++val;返回*this;};
void运算符=(int i){*val=i;}
...
};
...
int数组[10];
MyIntPtr(阵列);
对于(int i=0;i 在C++中,引用的是一个值,而不是一个关于C++相关的变量,它不确定:“在C++中,预增量运算符产生一个左值,而在C中,它是一个rof值。为什么它是这样?”AkHIL,因为这两种语言是不同的。(这仅仅是一个设计问题,C++标准委员会做出了与C一个不同的决定)。我可以知道两个编译器内部都发生了什么。有任何有效的文档吗?@akhil有一些文档,您可以从中选择正确的信息。“编译器内部发生的事情”是什么意思?它解析源文本并输出机器代码,就是这样。
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;