使用整数指针

时间:2018-04-20 08:44:46

标签: c++ language-lawyer rvalue-reference lvalue lvalue-to-rvalue

如果我正确阅读implicit conversions

  

左值转换的左值

     

任何非函数非数组类型T的glvalue都可以隐式转换为相同类型的prvalue 。 [..]

     

除非在未评估的上下文中遇到(在sizeof,typeid,noexcept或decltype的操作数中),否则此转换使用原始glvalue作为构造函数参数有效地复制构造类型为T的临时对象,并且该临时object作为prvalue返回。

那为什么这不起作用?

int* iptr = nullptr;
int*&& irr = iptr; // Cannot bind lvalue to rvalue reference

类型int*应该通过临时隐式转换为相同类型的prvalue - 从而绑定到rvalue引用而没有问题。

1 个答案:

答案 0 :(得分:2)

标准规定这是明确的形式错误;不应该(不应该)考虑左值到右值的转换。

来自[dcl.init.ref]/5.4.4

  

如果引用是右值引用,则初始化表达式不应是左值。

     

[实施例:

double d2 = 1.0;
double&& rrd2 = d2;                 // error: initializer is lvalue of related type