询问:将函数返回值绑定到const引用是否仍属于C++未定义行为?
问题解答
这种写法完全合法,不属于C++未定义行为。
C++标准明确规定:当一个临时对象被绑定到const左值引用(或者右值引用)时,该临时对象的生命周期会被延长,与引用的生命周期保持一致。
在你的代码场景里:
vecExplode返回的是std::vector<std::string>类型的临时对象- 这个临时对象被绑定到
const std::vector<std::string>& args上 - 临时对象的生命周期会被延长至
args所在的作用域结束(也就是func函数执行完毕时)
因此在func函数中访问args是完全安全的,不存在未定义行为。
需要补充的是:如果尝试将临时对象绑定到非const左值引用,那才是不符合标准的写法,但你的代码使用const引用,完全符合规则。
内容的提问来源于stack exchange,提问作者zeronull
相关产品推荐
相关产品推荐

