其他分享
首页 > 其他分享> > c – 按值返回到右值参考

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