【发布时间】:2016-11-08 15:34:27
【问题描述】:
C++ 的known feature const 引用延长了从函数返回的临时对象的生命周期,但是对从函数返回的临时对象的成员使用常量引用是否可以接受?
示例:
#include <string>
std::pair<std::string, int> getPair(int n)
{
return {std::to_string(n), n};
}
int main(int, char*[])
{
const int x = 123456;
const auto& str = getPair(x).first;
printf("%d = %s\n", x, str.c_str());
return 0;
}
输出:
123456 = 123456
【问题讨论】:
-
恕我直言,像“......是一个众所周知的功能......”这样的短语不是很好。他们歧视那些不知道该功能并且不携带任何信息的人。否则,有趣的问题
-
我不是 100% 确定,但我认为按照标准它是有效的。临时对象的生命周期应延长为其成员访问的生命周期(在这种情况下为
str)。也就是说,您应该可以通过复制获取返回值。RVO将避免做额外的副本。 -
我认为这个答案与当前标准相比已经过时了
标签: c++ c++11 reference constants language-lawyer