通过函数调用中构造的引用传递对象

时间:2015-12-06 15:23:57

标签: c++

我们使用这样的函数:

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"));

非常感谢!

1 个答案:

答案 0 :(得分:3)

您可以添加已删除的rvalue重载以禁止完全绑定到rvalues:

void GetValue(std::string && val) = delete;

或者,你可以让rvalue重载返回一个prvalue,从而避免悬空引用:

std::string GetValue(std::string && val) { return GetValue(val); }