C++11 лажа?
я написал простенький тестик, который даёт неожидаемый результат (VS2013).
Вот он:
class DDD
{
void operator =(const DDD&);
void operator =(DDD&&);
public:
int xxx;
DDD() : xxx(0) {}
DDD(const DDD& a) : xxx(a.xxx + 1){}
DDD(DDD&& a) : xxx(a.xxx + 2){}
};
DDD ddd(){ return DDD(); }
int _tmain(int argc, _TCHAR* argv[])
{
DDD d = ddd();
cout << d.xxx << endl; // print 0
}
По моим объяснимым предположениям в конце d.xxx должно быть либо 1 (если сработал конструктор копии), либо 2 (если сработал конструктор перемещения), но результат неожиданный: 0.
Были подозрения что компилятор сделал функцию ddd() как инлайн, однако я её перемещал и в конец файла, добавил вначале лишь объявление, - результат
тот же.
Лажа в компиляторе?
DDD ddd(){ DDD d; return d; } выдаёт 2, т.е. сработало перемещение. Тут нареканий нет.