gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 10:04:25 26 4
gpt4 key购买 nike

#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第二个输出的标志。
我知道 move() 在 c++11(及更高版本)中的作用。
但正如我所见,在 c++98 中使用 move() 对传递的对象没有任何作用,只会发生深拷贝。
那为什么c++98中有move()??

最佳答案

可以调用std::move的原因在 C++11 之前,libc++ 不包装 its implementation of it#if _LIBCPP_STD_VER >= 11 .这在 libstdc++(Linux 默认使用)中不起作用,因为 it guards std::move with #if __cplusplus >= 201103L .
至于为什么用它不成a.data()为空,这是因为 libc++ does wrap the move constructor in #ifndef _LIBCPP_CXX03_LANG ,所以它回退到复制构造函数。

关于c++ - c++98 中的 move() 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65009198/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com