gpt4 book ai didi

c++ - 为什么要同时从函数返回并分配给参数?

转载 作者:行者123 更新时间:2023-12-02 13:21:57 25 4
gpt4 key购买 nike

在我正在处理的代码库中,我不断遇到这样的代码:

std::string& getSomeValue(std::string& str)
{
str = "Hello World!";
return str;
}

把这个写下来有什么好处吗:

std::string getSomeValue()
{
return "Hello World!";
}

我很欣赏该函数中没有字符串构造,但许多缺点掩盖了这个小小的好处。特别是因为省略和移动应该消除大部分开销。

如果调用它会导致未定义的行为

std::string s = getSomeValue(s);

这样写很不整洁,而且 s 现在不能是 const:

std::string s; 
getSomeValue(s);

你不能传递临时的,例如

std::string s = getSomeValue("");

最佳答案

您无法将 std::string& getSomeValue(std::string& str) 更改为 std::string getSomeValue()。这会破坏 API 和 ABI。使用该函数的现有代码需要更改。

因此,好处之一是保持 API/ABI 兼容性。至于为什么这么写,可能是 C++11 之前的代码。

但是,可以引入重载,保留旧函数并引入新的、更好的形式。然后可以将旧的标记为已弃用:

[[deprecated("unsafe, use getSomeValue() without argument instead")]]
std::string& getSomeValue(std::string& str);

使用旧函数将生成编译器警告,并且可以随着时间的推移更改代码以采用新函数。

关于c++ - 为什么要同时从函数返回并分配给参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60529465/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com