Nach dem Versuch, ein Beispiel in Bezug auf Bewegung Konstrukteurs Verschieben Konstruktor aufgerufen zu schreiben, lief ich in den folgenden Code:nicht
#include <utility>
#include <iostream>
using namespace std;
class Data
{
public:
Data()
: x (3)
{
cout << "Data()" << endl;
}
Data(Data&&)
: x(4)
{
cout << "Data(&&)" << endl;
}
int x;
};
int main()
{
Data a;
Data b (std::move(a));
cout << b.x << endl;
return 0;
}
der Umzug Konstruktor hier nicht genannt Warum? Das Programm druckt:
Daten()
Was ich finde, ist noch seltsamer, dass eine Kopie Konstruktor durch Hinzufügen, plötzlich, es den Umzug Konstruktor tut nennen ..
.Data(const Data&)
: x(2)
{
cout << "Data(copy)" << endl;
}
Und jetzt wird es drucken
Daten (& &)
P. S Ich bin gcc 4.4.5
Seltsam ... Ich bin unter ubuntu, GCC 4.8. Es ruft den Move-Konstruktor auf. Welchen Compiler benutzen Sie? –
Gleiches hier (move Konstruktor wird richtig aufgerufen), mit gcc 4.7.2. – CAdaker
Es [does] (https://ideone.com/CS5LC3) wird aufgerufen. Was ist dein Compiler und welche Version? – edmz