【发布时间】:2016-04-18 14:05:51
【问题描述】:
如果有的话,
void foo(Bar c);
void foo(Bar&& c);
foo(Bar());
为什么对“foo”的调用是模棱两可的? foo 参数中的 Bar() 显然不是 rValue 吗?
【问题讨论】:
如果有的话,
void foo(Bar c);
void foo(Bar&& c);
foo(Bar());
为什么对“foo”的调用是模棱两可的? foo 参数中的 Bar() 显然不是 rValue 吗?
【问题讨论】:
绑定到引用是“完全匹配”,绑定到非引用也是如此,因此两个重载都同样好。
在 Standardese 中,这是 13.3.3.1.4(“引用绑定”,[over.ics.ref]):
当引用类型的参数直接(8.5.3)绑定到参数表达式时,隐式转换序列是恒等转换[...]
【讨论】: