c – 按值返回到右值参考
作者:互联网
我正在研究右值引用,我对以下代码有疑问:
string func() {
return "Paul";
}
int main()
{
string&& nodanger = func();
// The lifetime of the temporary is extended
// to the life-time of the reference.
return 0;
}
问题是:func()返回什么?
我相信这是发生的事情:
> func返回一个prvalue“Paul”(由于rvalue->指针转换,这是一个const char *吗?)
>隐式构造一个字符串对象(使用哪个ctor?)
>由于参考折叠规则,它必然会“nodanger”(这与字符串和正常引用有什么不同?)
解决方法:
你的func()函数返回一个std :: string prvalue.用于构造std :: string的constructor是
basic_string( const CharT* s,
const Allocator& alloc = Allocator() );
这个prvalue绑定到rvalue引用nodanger,它延长了它的生命周期以匹配引用本身的生命周期.参考折叠在这里没有发挥作用.
does this behave any differently from a
string&
normal reference?
如果nodanger是一个字符串&因为您无法将rvalues绑定到非const左值引用.示例中的生命周期扩展行为与以下情况相同
std::string const& nodanger = func();
标签:c,c11,rvalue-reference 来源: https://codeday.me/bug/20190722/1505002.html