为什么传递值并通过rvalue重载c ++函数调用模糊不清?

时间:2016-04-18 14:05:51

标签: c++ c++11 rvalue

如果我有,

void foo(Bar c);
void foo(Bar&& c);

foo(Bar()); 

为什么对'foo'的调用是模棱两可的? foo参数中的Bar()显然不是rValue吗?

1 个答案:

答案 0 :(得分:4)

绑定到引用是一个“完全匹配”,因为绑定到非引用,所以两个重载都同样好。

在Standardese中,这是13.3.3.1.4(“引用绑定”,[over.ics.ref]):

  

当引用类型的参数直接(8.5.3)绑定到参数表达式时,隐式转换序列是标识转换[...]