我想创建一个对对象进行可选引用的函数,如果没有提供,则在函数的持续时间内创建一个函数,即
void Foo(Bar& b = Bar()) { /* stuff */ }
当然,这是无效的代码,因为 aBar
不能Bar
在此上下文中隐式转换为引用。引用不能是const
,因为b
在函数内部发生了变异。
您可以通过使用右值引用来解决这个问题,即
void Foo(Bar&& b = Bar()) { /* stuff */ }
这是对右值引用的有效使用吗?调用者现在必须调用std::move
他们的Bar
参数,即使我无意清除已传递的Bar
,就像您传递右值时通常的情况一样。