c++ - 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 定义后,我将其返回类型形式修改int
为int &
g++ 不会提示错误。
我通常使用java,上周我刚刚学习了c++。我需要一些专家的帮助。
解决方案
该语句与其下一行是如此相似
int & b = a
。为什么它的下一行可以很好的运行并且不提示同样的错误。
下一行有效,因为a
它是一个左值。左值可以绑定到左值引用(兼容类型)。右值不能绑定到对非 const 类型的左值引用。
另一个奇怪的是,在我修改了我的 func 定义后,我将它的返回类型从 int 修改为 int & g++ 不会提示错误。
这是因为对返回左值引用的函数的调用也是一个左值表达式。
推荐阅读
- dns - 具有 Strongswan、DNS 服务器、重叠子网的站点到站点 VPN)
- sql - BigQuery-如何为我的查询使用槽
- directx - dxva2渲染中视频大小发生变化怎么办
- sql-server - 关于 T-SQL 查询的建议
- laravel - 限制 API 用户从 Web Admin Portal 登录
- python - Coreml:如何将数组 (1, 3, 80, 80, 19) 重塑为 (3, 6400, 19) 或 (1, 3, 6400, 19)
- terraform - 无法请求 Eventhub 专用 Sku
- android - /usr/bin/as: 无法识别的选项 '-EL'
- ios - 如何将我的应用程序从 IOS 13 迁移到 IOS 14?
- c - C - 实现相同名称的链接库的问题