[英]What is move() in c++98?
#include <iostream>
#include <vector>
using namespace std;
int main(void){
vector<int> a;
a.push_back(3);
vector<int> b = move(a);
cout<<"b: "<<b.data()<<endl;
cout<<"a: "<<a.data()<<endl;
return 0;
}
Output(在 c++98 中):
b: 0x7f9a82405730
a: 0x7f9a82405720
Output(在 c++11 中):
b: 0x7f9a82405730
a: 0x0
我正在使用苹果 clang 11.0.3。
第一个 output 没有使用编译器标志。
第二个 output 的-std=c++11
标志。
我知道 move() 在 c++11 (和更高版本)中的作用。 但正如我所见,在 c++98 中使用 move() 对传递的 object 没有任何作用,只会发生深度复制。
那为什么c++98中有move()??
您可以在 C++11 之前调用std::move
的原因是 libc++ 没有将其实现包装在#if _LIBCPP_STD_VER >= 11
中。 这在 libstdc++(Linux 默认使用)中不起作用,因为它使用#if __cplusplus >= 201103L
保护std::move
。
至于为什么使用它不会使a.data()
成为 null,这是因为 libc++ 确实将移动构造函数包装在#ifndef _LIBCPP_CXX03_LANG
中,所以它回退到复制构造函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.