为啥我不能直接从向量中的函数 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_backing 到具有函数更新值的向量不允许为什么?

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&amp; 而不是 std::string&amp;?如果你使用后者,你可以链接调用。 为什么不按值返回std::string?一般来说,值语义在输入和输出上都很好(更容易推断生命周期)并且编译器很可能会优化它(RVO),此外,您将支付一次副本无论如何你打了push_back.. 不想让人讨厌;真的很好奇你在这里使用const&amp; 返回值的原因(我可能会学到一些东西)。 @NathanOliver -- 这更多是出于一般的清洁感。当它不是设计的一部分时,我不喜欢贩卖对可修改数据的引用。这里的目标是把它推回去,这与const&amp; 配合得很好。 @JesperJuhl - 是的,您将在 push_back 中为副本付费,但这并不能证明在退货中为 another 副本付费。我通常认为涉及值和const&amp;s 的函数调用在语义上或多或少是等效的,并且更喜欢引用,因为它们不涉及复制。如果编译器可以识别出不必要的副本,那就太好了,但如果不需要,那就更好了。

以上是关于为啥我不能直接从向量中的函数 push_back 更新值? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

为啥我无法将对象 push_back 放入 C++ 多维向量中

使用 push_back 向向量添加非空字符串,向量内容为空。为啥字符串没有添加到向量中?

为啥我会使用 push_back 而不是 emplace_back?

为啥这个向量代码会出现分段错误?

如何从 C++ 中的函数返回向量?

push_back 时跳过向量位置