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