gpt4 book ai didi

c++ - 用运算符<<返回一个按值

转载 作者:行者123 更新时间:2023-12-02 09:48:17 25 4
gpt4 key购买 nike

所以,我已经有一段时间了。

std::vector<std::string> operator<<(std::vector<std::string>& vec, std::string const& x)
{
vec.push_back(x);
return vec;
}
我似乎无法理解这一点。我正在引用一个 vector 以及x的常量,并返回一个 vector ,在这种情况下,我实际上是在复制返回值,但是为什么会出现这样的问题呢?只需复制一些字节即可。
有趣的部分在这里:
vec << string << string ; // This doesn't work, but
vec << string;
vec << string; // This does !
我不明白问题可能在哪里,希望有人能帮助我。

最佳答案

该返回值的全部目的是能够链接<<调用并在同一对象上运行它们,在您的示例中并非如此。让我们考虑一下在重新设置值而不是引用的同时尝试vec << string << string代码时会发生什么。

  • 您有一个vec对象,并使用第一个字符串参数将其称为operator<<,这非常好
  • operator<<完成工作,创建vec 的副本,并返回此临时副本。
  • 临时副本使用第二个字符串
  • 调用了它的 operator<<
  • operator<<可以完成工作,但是在临时副本
  • 上可以完成工作
  • 临时副本是丢弃的

  • 当然,当您两次调用 <<而不链接它时,它就可以工作,因为在这种情况下,您只是在正确的对象上手动调用它,而只是丢弃方法返回的临时副本。
    希望事情能弄清楚。

    关于c++ - 用运算符<<返回一个按值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62971949/

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