news 2026/11/2 19:03:46

C++ 引用 “int a;”,编译器会报错,需要初始化

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C++ 引用 “int a;”,编译器会报错,需要初始化

int& a;声明

不可以。int& a;编译会直接报错(GCC 提示'a' declared as reference but not initialized)。

引用必须在声明时绑定到一个对象,而且绑定之后不能再改绑到别的对象。

正确的初始化方式

intx=10;int&a=x;// 最常见的写法int&b(x);// 直接初始化int&c{x};// 列表初始化(C++11)

绑定规则

int&r1=10;// 错误:非 const 左值引用不能绑定字面量或临时对象constint&r2=10;// 正确:const 引用可以绑定临时对象int&&r3=10;// 正确:右值引用(C++11)

const int& r2 = 10;中,临时对象的生命周期会被延长到与r2相同。

引用不能改绑

intx=1,y=2;int&a=x;a=y;// 不是让 a 改去引用 y,而是把 y 的值赋给 x// 执行后 x == 2

这是初学者很容易混淆的地方:对引用的赋值操作,作用的是被引用的对象,而不是引用本身。

可以先不写初始值的几种场合

以下场合看起来没有初始化,但其实只是绑定发生在别的地方,并不是真的未初始化。

1. 函数参数

voidf(int&a);// 调用时由实参完成绑定

2. 类成员

引用类型的成员必须在构造函数的初始化列表中绑定(或者提供默认成员初始值),不能在构造函数体内赋值:

structS{int&ref;S(int&v):ref(v){}// 正确:在初始化列表中绑定};

3.extern声明

externint&a;// 在其他编译单元中定义并初始化

总结

写法是否合法说明
int& a;不引用必须初始化
int& a = x;是绑定到左值
int& a = 10;不非 const 左值引用不能绑定字面量
const int& a = 10;是const 引用可绑定临时对象
int&& a = 10;是右值引用(C++11)

一句话记忆:引用 = 某个对象的别名,有了对象才能有别名,所以必须在声明时初始化,且终身不变。


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/11/2 19:03:38

翻了三个月问数日志,业务真正常问的就四类,剩下那些才是麻烦

园区数智 问数平台实战一个做问数平台的人的后台观察上个月我把问数平台后台三个月的提问日志导出来看了一遍。本来是想找优化点,结果看到一个有点反直觉的事。 八成以上的提问,全都落在四类里。剩下不到两成,才是真正逼我们加班到九点的东西…

作者头像 李华
网站建设 2026/11/2 18:57:20

RAG 答错先别换模型:从证据到答案的五项检查

RAG 答错先别换模型:从证据到答案的五项检查一个 RAG 助手回答“退货申请需要在五天内送达”,但当前规则其实是“完整申请收到后,三个工作日内送达”。错误可能来自过期文档、分块丢失条件,也可能来自模型误读。只看最终答案&…

作者头像 李华
网站建设 2026/11/2 18:56:47

用 Rust 做数控加工仿真?这个库把“材料去除“这件事做透了

cutrail —— 一个用 Rust 写的材料去除仿真核心,正在悄悄补齐 CAM 开源工具链里最关键的那块拼图。先说一个老难题 做数控加工的人都知道:上机之前必须验证刀路。 一段 NC 程序写错了,轻则过切报废工件,重则撞机伤设备。所以在真…

作者头像 李华
网站建设 2026/11/2 18:37:26

TCP四元组不同,为什么bind同一个源端口仍会失败?

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/11/2 18:37:01

从 FBX 到骨骼动画:MonoGame 快速完成 3D 模型加载与角色动作

从 FBX 到骨骼动画:MonoGame 快速完成 3D 模型加载与角色动作 【免费下载链接】MonoGame One framework for creating powerful cross-platform games. 项目地址: https://gitcode.com/gh_mirrors/mo/MonoGame MonoGame 是一个跨平台的 C# 游戏框架。本文讲清…

作者头像 李华