-1 c++ c++11 visual-studio-2013
在vs13中写了以下代码:
std::vector<std::string> myvector(1000);
std::fill(myvector.begin(), myvector.end(), "Hello World");
std::vector<std::string> pushto;
for (auto s: myvector)
pushto.push_back(std::move(*s));
Run Code Online (Sandbox Code Playgroud)
工作,但没有移动,它称为字符串复制ctor.myvector最后还有他的"Hello World".像这样使用常规的c ++ 98迭代:
std::vector<std::string> myvector(1000);
std::fill(myvector.begin(), myvector.end(), "Hello World");
std::vector<std::string> pushto;
for (auto s = myvector.begin(); s != myvector.end();s++)
pushto.push_back(std::move(*s));
Run Code Online (Sandbox Code Playgroud)
实际上工作,并且调用了移动.myvector字符串是空的.为什么第一个更现代的符号不起作用?
在您使用的第一个示例中for (auto s: myvector),s在这种情况下是当前迭代中值的副本.要完成你想要的,你应该通过参考 - for (auto& s: myvector).
注意,之后不保证字符串被清空std::move,此调用只是将其参数转换为右值引用(&&).其他std::vector::push_back具有rvalue referece 参数重载的函数(例如)可能会释放它们的argumnet资源.
| 归档时间: |
|
| 查看次数: |
90 次 |
| 最近记录: |