Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C编译器中出现错误,但C++;编译程序_C++_C_Compiler Construction_Compiler Errors - Fatal编程技术网

C++ C编译器中出现错误,但C++;编译程序

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++(g++)编译器来说是正常的,但在使用c(gcc)编译器时显示错误。我可以知道原因吗?
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;