C++ 最重要的const&;右值参考值
在C++03中,可以使用C++ 最重要的const&;右值参考值,c++,c++11,C++,C++11,在C++03中,可以使用常量&技巧(或“最重要常量”)将临时变量的生存期延长到引用的生存期。我的问题是,在C++0x中,这种行为是否扩展到右值引用?即auto&&x=someFunction()根据[class.temporary],如果编译成功,则会延长临时文件的生存期。它在VC10 SP1上完美编译: int && Get() { return 10; } const auto&& y=Get(); 你为什么需要这个?”const auto&'执行
常量&
技巧(或“最重要常量”)将临时变量的生存期延长到引用的生存期。我的问题是,在C++0x中,这种行为是否扩展到右值引用?即auto&&x=someFunction()代码>根据[class.temporary]
,如果编译成功,则会延长临时文件的生存期。它在VC10 SP1上完美编译:
int && Get()
{
return 10;
}
const auto&& y=Get();
你为什么需要这个?”const auto&'执行完全相同的工作。您可以修改临时值。实际上,如果您查看移动构造函数,它们正是这样做的。如果someFunction
返回左值,auto&
也会自动调整。使自动&&
成为左值引用。您的初始化错误。在这种情况下,x
总是被推断为对std::initializer\u list
:auto
的引用,它特别处理带括号的初始化器列表。没有明确提到右值引用,尽管我认为这是术语“references”所隐含的。但是,这让我感到不安。参见§8.3.2/2:使用&声明的引用类型称为左值引用,使用&声明的引用类型称为右值引用。(…)除非明确指出,它们在语义上是等价的,通常称为引用。