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

#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 中):

#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++11 中):

b: 0x7f9a82405730
a: 0x7f9a82405720

我正在使用 Apple clang 11.0.3。

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

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

我知道 move() 在 c++11(和更高版本)中做什么。但是正如我所看到的,在 c++98 中使用 move() 对传递的对象没有任何作用,只会发生深拷贝。

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

回答

您完全可以调用std::moveC++11 之前的原因是 libc++ 没有将它的实现包装在#if _LIBCPP_STD_VER >= 11. 这在 libstdc++(Linux 默认使用)中不起作用,因为它std::move使用#if __cplusplus >= 201103L.

至于为什么使用它不会makea.data()为空,是因为libc++确实将移动构造函数包装在了 中#ifndef _LIBCPP_CXX03_LANG,所以它回落到了复制构造函数。


以上是c++98中的move()是什么?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>