首页 > 解决方案 > 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。为什么它的下一行可以很好的运行并且不提示同样的错误。

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

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

标签: c++reference

解决方案


该语句与其下一行是如此相似int & b = a。为什么它的下一行可以很好的运行并且不提示同样的错误。

下一行有效,因为a它是一个左值。左值可以绑定到左值引用(兼容类型)。右值不能绑定到对非 const 类型的左值引用。

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

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


推荐阅读