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

C++临时变量是否会在语句结束时释放?是否属于标准规定?

问题解答

你观察到的执行结果完全符合C++标准的强制规定,临时对象默认在创建它的完整语句(完整表达式)结束时释放是通用规则。

具体规则说明

  • C++标准中定义:除了引用生命周期延长、返回值优化等少数特殊场景外,所有临时对象的生命周期都会持续到创建它的完整表达式(full-expression) 求值完全结束。
    你代码中main函数里由逗号运算符、逻辑与运算符连接的那整条语句,就是一个独立的完整表达式,你创建的C类临时实例属于这个表达式内的临时对象,自然要等整个表达式的所有操作(两次kkk2调用、两次printf调用、逻辑与运算)全部执行完成后,才会调用析构函数释放。
  • 你原本预期kkk调用结束就释放临时对象,属于对函数参数绑定规则的误解:绑定到函数调用实参的临时对象,生命周期不会在函数返回时立刻结束,而是会延长到包含该函数调用的完整表达式结束,刚好匹配你测试的场景表现。

规则验证

你可以将kkk(C());单独作为一行语句执行,此时该语句本身就是一个完整表达式,输出会变为:

C O
kkk
C D

完全符合“完整表达式结束释放临时对象”的规则。
你测试的g++、clang++、msvc++输出完全一致,正是因为这是标准强制要求的通用行为,不属于编译器自定义实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 18:06:05