关于C++中字面量初始化及传参时临时对象创建的疑问
关于字面量5的临时对象创建问题
先直接给出结论:
- 对于
int x = 5;:不会创建临时对象 - 对于
fun(5);(函数参数为const int&):会创建临时对象
详细解释
场景1:
int x = 5;
C++中针对int这类基本数据类型的直接初始化,编译器会直接把字面量5的值写入变量x的内存空间,完全不需要额外创建临时对象中转。这和x = y + z的情况不一样——后者y+z是运行时表达式的计算结果(右值),必须靠临时对象暂存,但字面量5是编译期就能确定的常量,编译器可以直接完成初始化操作,跳过临时对象的开销。场景2:
fun(5);
当把字面量5传给接受const int&的函数时,因为字面量是右值,而左值引用(哪怕是const修饰的)无法直接绑定到右值。这时编译器会创建一个临时的int对象,把5的值拷贝进去,再将函数的引用参数绑定到这个临时对象上。这个临时对象的生命周期会被延长至函数调用结束,保证函数执行期间引用始终有效。
你之前提到的fun(x+y)场景和这个逻辑完全一致:x+y的计算结果是右值,同样会生成临时对象供引用绑定,和字面量5的处理规则相同。
内容的提问来源于stack exchange,提问作者yousef pc
相关产品推荐
相关产品推荐

