Разница между приведением типов и использованием std::move()?

Мне просто немного любопытно узнать о новой функции std::move(), которая только что была добавлена в новейший стандарт C++.

Закончил читать статью об этом и узнал, что определение функции равно

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

Правильно ли думать, что в принципе никакой разницы нет? Ну, я почти уверен, что я прав, но также знаю, что быть слишком самоуверенным всегда приводит к обратному результату.

Заранее спасибо!

5
задан R. Martinho Fernandes 22 September 2011 в 04:28
поделиться