例如:
int StrLen(const std::string &s = "default string") {
const std::string &t = "another string"; // BTW, is this line safe?
return s.size();
}
更新
SoapBox 的结论是正确的,但原因并不完全正确。
临时对象的生命周期会自动延长到与持有它的引用相同。
这通常是正确的,但有几个例外。一个是
“在函数调用中临时绑定到引用参数会一直持续到包含调用的完整表达式完成为止。”
我认为这个例外适用于默认参数情况。
另一个例外与 SoapBox 回答中的附加示例有关:
“临时绑定到函数返回语句中的返回值的生命周期不会延长;临时在返回语句中的完整表达式结束时被销毁。”