Sono solo un po 'curioso della nuova funzione std :: move() che è stata appena aggiunta al più recente standard C++.La differenza tra digitare cast e usare std :: move()?
finito di leggere un articolo su di esso e ha scoperto che la definizione della funzione è
namespace std {
template <class T>
inline typename remove_reference<T>::type&& move(T&& x)
{
return x;
}
}
Questo sembra che non ha alcuna differenza tra chiamata std :: mossa e l'utilizzo di casting.
Per esempio qui,
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;
}
è giusto pensare che non v'è praticamente alcuna differenza? Beh, sono abbastanza sicuro di aver ragione, ma so anche che essere troppo fiducioso si ritorce sempre.
Grazie in anticipo!
Grazie! questo mi aiuta molto! –