Po wypróbowaniu napisać przykład dotyczące konstruktorów poruszać, wpadłem na następujący kod:Przenieś konstruktor nie nazwie
#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;
}
Dlaczego nie konstruktor ruch zwany tutaj? drukuje programowe:
dane()
Co mam ze znalezieniem nawet dziwniejsze jest to, że przez dodanie konstruktor kopiujący, nagle robi wywołać konstruktor ruch .. .
Data(const Data&)
: x(2)
{
cout << "Data(copy)" << endl;
}
A teraz będzie drukować
danych (& &)
P.S Używam gcc 4.4.5
Dziwne ... Jestem pod ubuntu, GCC 4.8. Wywołuje konstruktor ruchu. Jakiego kompilatora używasz? –
To samo tutaj (konstruktor ruchu jest wywoływany poprawnie), z gcc 4.7.2. – CAdaker
To [robi] (https://ideone.com/CS5LC3) zostaje wywołane. Jaki jest twój kompilator i którą wersję? – edmz