为啥我不能直接从向量中的函数 push_back 更新值? [关闭]
Posted
技术标签:
【中文标题】为啥我不能直接从向量中的函数 push_back 更新值? [关闭]【英文标题】:Why can't I directly push_back update value from function in vector? [closed]为什么我不能直接从向量中的函数 push_back 更新值? [关闭] 【发布时间】:2017-06-27 16:56:48 【问题描述】:push_back
ing 到具有函数更新值的向量不允许为什么?
std::vector< std::string >goin;
goin.push_back(function(somestringvalue)); // why cant it take update value?
void function(std::string& var)
var += "pre";
【问题讨论】:
function
返回void
...
因为你的函数没有返回任何东西......
你在说什么“返回值”?您的函数没有任何“返回值”。
var + = "pre";
在语法上不是有效的 C++。
请原谅我更新了我的问题,我的意思是更新的价值。我需要单行完成
【参考方案1】:
正如其他人所说,问题在于function
没有返回任何内容。解决这个问题的方法是让它返回它的参数:
const std::string& function(std::string& var)
var += "pre";
return var;
这样它会修改传递给它的字符串,并返回对该字符串的引用,以便您可以将其推送到向量中。
【讨论】:
这就是我要找的东西,谢谢@pete Becker 是否有理由返回const std::string&
而不是 std::string&
?如果你使用后者,你可以链接调用。
为什么不按值返回std::string
?一般来说,值语义在输入和输出上都很好(更容易推断生命周期)并且编译器很可能会优化它(RVO),此外,您将支付一次副本无论如何你打了push_back
.. 不想让人讨厌;真的很好奇你在这里使用const&
返回值的原因(我可能会学到一些东西)。
@NathanOliver -- 这更多是出于一般的清洁感。当它不是设计的一部分时,我不喜欢贩卖对可修改数据的引用。这里的目标是把它推回去,这与const&
配合得很好。
@JesperJuhl - 是的,您将在 push_back 中为副本付费,但这并不能证明在退货中为 another 副本付费。我通常认为涉及值和const&
s 的函数调用在语义上或多或少是等效的,并且更喜欢引用,因为它们不涉及复制。如果编译器可以识别出不必要的副本,那就太好了,但如果不需要,那就更好了。以上是关于为啥我不能直接从向量中的函数 push_back 更新值? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
为啥我无法将对象 push_back 放入 C++ 多维向量中
使用 push_back 向向量添加非空字符串,向量内容为空。为啥字符串没有添加到向量中?