You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++类重载下标运算符operator[]返回值带&与不带的差异是什么?

C++下标运算符返回引用和返回值的输出问题解答

为什么两段代码输出结果完全一致?

  • 你调用std::cout输出double&类型(double的左值引用)和double类型时,std::ostream的<<运算符重载都会读取对应位置存储的浮点数值打印,不会输出内存地址。只有输出指针类型(比如double*)时才会打印内存地址,引用本质是原变量的别名,不是指针,所以不会触发地址打印逻辑。
  • 两段代码你都只做了只读访问操作:返回引用时直接读取原数组elem[2]的数值,返回值时拷贝了elem[2]的数值再打印,二者读取到的数值完全相同,输出自然一致,也不会触发运行报错。

两种写法的核心区别是什么?

只有在写操作场景下差异才会体现,比如你在main函数中加一行赋值代码:

some_class[2] = 10.5;
std::cout << some_class[2] << std::endl;
  • 第一段返回double&的代码可以正常编译运行:返回的是elem[2]的引用,赋值操作会直接修改类内部数组对应位置的值,第二行打印结果为10.5。
  • 第二段返回double的代码编译直接报错:返回的是临时右值,C++不允许对临时右值做赋值操作。

内容的提问来源于stack exchange,提问作者cppprogramming

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 21:36:04