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

C++ 通过函数调用中构造的引用传递对象,c++,C++,我们使用如下函数: std::string const & GetValue(std::string const & val) { return val; } 如果用户正在传递一个临时文件,是否有办法中断编译,因为 该代码有时会被误用,使用如下函数调用: std::string const & abc = GetValue(std::string("Value")); 如果 返回值不是指定给引用,而是指定给对象 std::string def = GetValue(s

我们使用如下函数:

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

非常感谢

您可以添加已删除的右值重载,以完全禁止绑定到右值:

void GetValue(std::string && val) = delete;
或者,您可以使右值重载返回prvalue,从而避免挂起引用:

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

您可以添加已删除的右值重载,以完全禁止绑定到右值:

void GetValue(std::string && val) = delete;
或者,您可以使右值重载返回prvalue,从而避免挂起引用:

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

@kerrek SB的答案涵盖了第一部分,当涉及到问题的第二部分时,答案是,不,没有危险,你将有效地复制传递的字符串,即使它是一个temporary@kerrek某人的回答包括第一部分,当谈到你问题的第二部分时,答案是,没有危险,您将有效地复制传递的字符串,即使它是临时字符串