我们使用这样的函数:
std::string const & GetValue(std::string const & val) {
return val;
}
如果用户传递临时文件,有没有办法打破编译,因为 代码有时会被使用函数调用误用,如下所示:
std::string const & abc = GetValue(std::string("Value"));
是否存在差异(关于传递对象的生命周期) 返回值未分配给引用,而是分配给对象?
std::string def = GetValue(std::string("Value"));
非常感谢!
答案 0 :(得分:3)
您可以添加已删除的rvalue重载以禁止完全绑定到rvalues:
void GetValue(std::string && val) = delete;
或者,你可以让rvalue重载返回一个prvalue,从而避免悬空引用:
std::string GetValue(std::string && val) { return GetValue(val); }