繁体   English   中英

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

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM