c++98 中的 move() 是什么?

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;
}

输出(在 c++98 中):

b: 0x7f9a82405730
a: 0x7f9a82405720

输出(在 c++11 中):

b: 0x7f9a82405730
a: 0x0

我正在使用 Apple clang 11.0.3。

第一个输出没有使用编译器标志。

-std=c++11 第二个输出的标志。

我知道 c++11(及更高版本)中 move() 的作用。 但是正如我所看到的,在 c++98 中使用 move() 对传递的对象没有任何作用,只是发生了深度复制。

那为什么c++98里有move()??

你可以在所有 C++11 之前调用 std::move 的原因是 libc++ 不包装 its implementation of it in #if _LIBCPP_STD_VER >= 11. This doesn't work in libstdc++ (which Linux uses by default) because it guards std::move with #if __cplusplus >= 201103L.

至于为什么使用它不会使a.data()为null,是因为libc++does wrap the move constructor in #ifndef _LIBCPP_CXX03_LANG,所以它回落到复制构造函数。