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某人的回答包括第一部分,当谈到你问题的第二部分时,答案是,没有危险,您将有效地复制传递的字符串,即使它是临时字符串