我一直在和我的上司争论这个功能:
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/