【问题标题】:std::vector, std::string; will it move?标准::向量,标准::字符串;它会移动吗?
【发布时间】:2017-06-21 10:08:15
【问题描述】:
std::vector<int> myvec(){
  std::vector<int> myvector;

  // do some push_back's

  return myvector;
}

std::string mystr(){
  std::string mystring = "hello";

  return mystring;
}

std::vector<int> myvector = myvec();
std::string mystring = mystr();

它会移动吗?还是按值复制?

没啥好说的,但要满足多写的要求。因此,我正在为你们写更多的文字,伙计们

【问题讨论】:

标签: c++11 stdvector


【解决方案1】:

根据 C++ ISO 标准,允许编译器对其进行复制、移动或分配给调用者并完全避免复制/移动。

大多数编译器(GCC、Clang、VC++)很可能会选择第三个选项(在调用者上分配它 - 返回值优化)并启用优化。

【讨论】:

    【解决方案2】:

    取决于您的 C++ 版本,但在现代 C++ 中,承诺返回 std:vector 是有效的,并且不会导致逐个元素的复制操作。

    【讨论】:

    • 别说现代 C++。说出什么标准版本,最好用参考或引用来支持它。
    猜你喜欢
    • 2015-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多