C++ 在同一函数中返回字符串引用并传递字符串引用

标签 c++ arguments return-type

我一直在和我的上司争论这个功能:

const std::string &GetCurrentDataSourceName(std::string & sName)
{
   sName = GetAnotherComponent().GetName();
   return  sName;
}

有没有理由同时包含函数返回类型和参数类型?该函数的目的是返回 1 个值。

他的动机和用例是可以做到这一点:

std::string sName = "";
SetSomeValue(GetCurrentDataSourceName(sName));

我认为像这样省略参数会更好:

const std::string &GetCurrentDataSourceName()
{
   return  GetAnotherComponent().GetName();
}

但他让我怀疑我的编码能力。

编辑: 返回的值必须是常量。代码也已更新以显示返回值的来源。我来自同一个类中的另一个组件;

最佳答案

原始函数看起来像一个丑陋的 hack。它肯定会从阅读代码的任何人那里调用“WTF”,因此应该避免它。

请注意,您的替换依赖于 somevalue 是全局对象或类似对象。如果不是这种情况(即,如果 somevalue 是在函数内部计算的),您将返回一个悬空引用 - 错误代码。

我想说最干净的方法是摆脱启用单行代码的黑客,依靠移动语义和/或 [N]RVO完成他们的工作,并按值(value)返回:

std::string GetCurrentDataSourceName()
{
   return somevalue;
}

关于C++ 在同一函数中返回字符串引用并传递字符串引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24649300/

相关文章:

c++ - 根据自定义 Iterator<T> 将返回值定义为 * 或 &

c++ - 简化对 vector 的查找操作

c++ - 将十六进制数据发送到串行端口?

具有固定索引的 C++ 可增长、紧密封装的数据结构

javascript - 参数 "{limit: 25}"在 jQuery .load() 函数中意味着什么?

java - 使 IntelliJ 标记所有参数而不仅仅是字符串参数

java - 为什么不能使用具有多态返回类型的原始类型?

c++ - Ref 限定的成员函数的目的是什么?

c - 如何在 C 中使虚拟 shell 不接受任何参数?

c++从c'tor返回+用于错误处理的默认返回值