c++参考错误



我的代码:


#include <iostream>
using namespace std;
int a = 100;
int func();
int main()
{
int c = 10;
int & d = c;
//  int & b = func();
int & b = a;
cout << b << endl;
return 0;
}
int func()
{
return a;
}

如果我打开通讯线路。我的g++编译器将提示错误cannot bind non-const lvalue referrence of type int& to an rvalue of type int。这太奇怪了。这个语句与它的下一行int & b = a非常相似。为什么它的下一行可以很好地工作,而不会提示相同的错误。

另一个奇怪的是,在我修改了我的函数定义后,我将其返回类型从int修改为int &,g++不会提示错误。

我通常使用java,上周刚刚学习了c++。我需要一些专家的帮助。

此语句与其下一行int & b = a非常相似。为什么它的下一行可以很好地工作,而不会提示相同的错误。

下一行之所以有效,是因为a是一个左值。左值可以绑定到左值引用(兼容类型(。Rvalues不能绑定到对非常量类型的左值引用。

另一个奇怪的是,在我修改了func定义后,我将其返回类型从int修改为int&g++不会提示错误。

这是因为对返回左值引用的函数的调用也是一个左值表达式。

int & b = func();

int & b = a;

定义左值引用。

a是一个左值。b可以参考。

CCD_ 9不返回全局变量CCD_。它返回一个临时副本a,一个prvalue。这个结果是如此短暂,它在行的末尾过期,引用它是毫无意义的。在使用引用之前,返回的值将无效,因此编译器会保护您免受运行时错误的影响。

但如果你做一个const参考,

const int & b = func();

编译器将执行一些深层魔术来保存返回值

方便阅读:什么是rvalues、lvalues、xvalues、glvalues和prvalues?

最新更新