为什么按值传递和按右值传递重载 C++ 函数调用不明确?
Why is pass by value and pass by rvalue overload c++ function call ambiguous?
如果我有,
void foo(Bar c);
void foo(Bar&& c);
foo(Bar());
为什么对 'foo' 的调用不明确?
foo 参数中的 Bar() 显然不是 rValue 吗?
绑定到引用是一种 "exact match",绑定到非引用也是如此,因此两种重载都同样好。
在标准语中,这是 13.3.3.1.4("Reference binding"、[over.ics.ref]):
When a parameter of reference type binds directly (8.5.3) to an argument expression, the implicit conversion sequence is the identity conversion [...]
如果我有,
void foo(Bar c);
void foo(Bar&& c);
foo(Bar());
为什么对 'foo' 的调用不明确? foo 参数中的 Bar() 显然不是 rValue 吗?
绑定到引用是一种 "exact match",绑定到非引用也是如此,因此两种重载都同样好。
在标准语中,这是 13.3.3.1.4("Reference binding"、[over.ics.ref]):
When a parameter of reference type binds directly (8.5.3) to an argument expression, the implicit conversion sequence is the identity conversion [...]