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

关于C++中字面量初始化及传参时临时对象创建的疑问

关于字面量5的临时对象创建问题

先直接给出结论:

  • 对于int x = 5;:不会创建临时对象
  • 对于fun(5);(函数参数为const int&):会创建临时对象

详细解释

  1. 场景1:int x = 5;
    C++中针对int这类基本数据类型的直接初始化,编译器会直接把字面量5的值写入变量x的内存空间,完全不需要额外创建临时对象中转。这和x = y + z的情况不一样——后者y+z是运行时表达式的计算结果(右值),必须靠临时对象暂存,但字面量5是编译期就能确定的常量,编译器可以直接完成初始化操作,跳过临时对象的开销。

  2. 场景2:fun(5);
    当把字面量5传给接受const int&的函数时,因为字面量是右值,而左值引用(哪怕是const修饰的)无法直接绑定到右值。这时编译器会创建一个临时的int对象,把5的值拷贝进去,再将函数的引用参数绑定到这个临时对象上。这个临时对象的生命周期会被延长至函数调用结束,保证函数执行期间引用始终有效。

你之前提到的fun(x+y)场景和这个逻辑完全一致:x+y的计算结果是右值,同样会生成临时对象供引用绑定,和字面量5的处理规则相同。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 09:49:50