gpt4 book ai didi

c++ - 类型转换和使用 std::move() 的区别?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:55:35 25 4
gpt4 key购买 nike

我对刚刚添加到最新 C++ 标准中的新函数 std::move() 有点好奇。

看完一篇文章,发现函数的定义是

 namespace std {
template <class T>
inline typename remove_reference<T>::type&& move(T&& x)
{
return x;
}
}

这似乎在调用 std::move 和使用转换之间没有任何区别。

比如这里,

class NPC{
int m_number1;
int m_number2;
public:
NPC() : m_number1(1), m_number2(2) {
cout << "NPC Constructor called!" << endl;
}

NPC(NPC&& _npc) : m_number1(_npc.m_number1), m_number2(_npc.m_number2) {
_npc.m_number1 = 0;
_npc.m_number2 = 0;

cout << "NPC Move Constructor called!" << endl;
}
};


int main() {
NPC n1;
NPC n2 = std::move(n1);

cout << "----------------" << endl;
NPC n3;
NPC n4 = (NPC&&)n3;
return 0;
}

认为基本没有区别是对的吗?嗯,我非常确定我是对的,但也知道过于自信总是适得其反。

提前致谢!

最佳答案

std::move 被定义为专门的转换:

static_cast<typename remove_reference<T>::type&&>(t)

如果你真的愿意,你可以这样做。但是,如果您只使用 std::move,那么对于每个人来说,您正在做的事情会更短、更明显。关于 && 转换的规则很奇怪,所以最好只使用 moveforward ,当这就是你的意思时。

关于c++ - 类型转换和使用 std::move() 的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7509050/

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