在cppreference.com和C++11 Standard使用的语言之间存在细微差别,关于临时对象的生命延长时间(强调我的)。
只要引用绑定到临时的临时或基础子对象,临时的生命周期就会延长以匹配引用的生命周期,
第二个上下文是引用绑定到临时的。引用绑定的临时值或绑定引用的子对象的完整对象的临时值在引用的生存期内持续存在,但以下情况除外:
根据标准,a subject can be a member subject, a base class subject, or an array element。
如果我们严格遵守以下示例代码中的标准的措辞
struct Foo
{
Foo() : a(10), b(20) {}
~Foo() { std::cout << "In Foo::~Foo()\n"; }
int a;
int b;
};
Foo getFoo()
{
return Foo();
}
void testFoo1()
{
int const& r = getFoo().a;
std::cout << "In testFoo1()\n";
(void)r; // Shut up the compiler
}
getFoo()
返回的对象的生命周期应该延长参考的生命周期。但是,a simple test似乎表明它没有。
标准使用的措辞是否有缺陷?
编译器是否不符合?
cppreference.com使用的措词是否有缺陷?
更新
cppreference.com使用的语言已更新为(强调我的):
每当引用绑定到临时或子对象时,临时的生命周期将延长以匹配引用的生命周期,但以下情况除外:
答案 0 :(得分:1)
标准使用的措辞是否是缺陷?
没有
编译器是否不符合?
是。正如在评论中指出的那样,它已在新版本的g ++,g ++ 7中得到修复。相关链接:http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54293。
cppreference.com使用的措词是否有缺陷?
是。 the page at cppreference.com的内容已更新。