Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 右值引用是否允许隐式转换?_C++_Type Conversion_C++11_Temporary_Rvalue Reference - Fatal编程技术网

C++ 右值引用是否允许隐式转换?

C++ 右值引用是否允许隐式转换?,c++,type-conversion,c++11,temporary,rvalue-reference,C++,Type Conversion,C++11,Temporary,Rvalue Reference,以下代码合法吗 std::string&& x = "hello world"; g++4.5.0编译此代码时没有任何问题。目前在usenet上讨论了这一点。看 这是不合法的 @Jerry,这是“引用应为右值引用,初始值设定项表达式应为右值”的子项目符号,字符串文字不满足此要求。@Jerry字符串文字为左值,如C中所示。请参见5.1.1/1。与普通整数不同,它们引用对象,需要转换为指针。因此,它们确实具有“存储定位器值”(引用对象的左值是)的属性。@Johannes:是的——我

以下代码合法吗

std::string&& x = "hello world";

g++4.5.0编译此代码时没有任何问题。

目前在usenet上讨论了这一点。看


这是不合法的

@Jerry,这是“引用应为右值引用,初始值设定项表达式应为右值”的子项目符号,字符串文字不满足此要求。@Jerry字符串文字为左值,如C中所示。请参见5.1.1/1。与普通整数不同,它们引用对象,需要转换为指针。因此,它们确实具有“存储定位器值”(引用对象的左值是)的属性。@Johannes:是的——我没有找到5.1.1/1,它明确地这么说。谢谢这显然使解释变得不可能。我相信它们在技术上也可能是右值。但我认为,作为左值更合适,因为它表明引用的存储是静态的,而不是临时的。在C89中,非左值数组表达式无法转换为指针,因此其原因本质上是非常技术性的。C99解除了这个限制。悲伤的微笑是否意味着你也希望我的例子是合法的?你知道这方面有什么有趣的用例吗?我认为命名右值的唯一原因是绑定到特殊重载。@reverse:这正是我问的原因,将参数传递给函数。只是为了提问,我不想编写和调用函数;)从技术上讲,没有命名的右值(除了关键字
this
nullptr
)。您可能指的是一个命名的右值引用——如本例中的
x
,它是一个左值,而不是右值。