在C++标准中,它表明const rvalue引用不绑定到左值?

Bel*_*loc 1 c++ rvalue-reference language-lawyer c++11

在C++标准中,它表明const rvalue引用不绑定到左值?

例如,下面的代码无法编译:

#include <iostream>

int i = 10;

int f(const int&& j) { return j; }
int main()
{
    std::cout << f(i) << '\n';
}
Run Code Online (Sandbox Code Playgroud)

dyp*_*dyp 6

在[dcl.init.ref]/5的最后一个子弹中(引用n3485):

如果T1[初始化引用的类型]与T2[初始化表达式的类型]引用相关并且引用是右值引用,则初始化表达式不应是左值.

在这种情况下,cv资格是无关紧要的.


/ 5的第一个(主要)项目符号不适用,因为引用不是左值引用:

如果引用是左值引用和初始化表达式[...]

第二个(主要)要点适用:

否则,引用应该是对非易失性const类型的左值引用(即,cv1应为const),或者引用应为右值引用

[强调我的]

由于初始化程序不是xvalue或函数prvalue且没有类类型,因此第一个子项目点不适用.

第二个子弹点是无条件的"其他",因此最后一个子弹点适用.


如果初始化程序与引用类型()没有引用相关T1,则示例将编译:

#include <iostream>

double i = 10;

int f(const int&& j) { return j; }
int main()
{
    std::cout << f(i) << '\n';
}
Run Code Online (Sandbox Code Playgroud)

实例