2012-01-10 3 views
0

Оглядываясь на StackOverflow, я обнаружил, что на Clang ++ при использовании стандарта C++ 11, если вы определили конструктор перемещения для своего класса, неявное построение конструктора отключен, т. е. конструктор копирования «исключен».Отключить «удаление конструктора копирования при возможности перемещения конструктора» на Clang

Есть ли способ отключить это поведение?

Кроме того, стандартизировано ли это поведение? Потому что у меня нет такого же поведения в GCC.

ответ

8

Есть ли способ отключить это поведение?

Нет, но вы всегда можете:

A(const A&) = default; 

Хотя я уверен, если лязг в настоящее время полностью реализует дефолтные конструктор копирования.

Кроме того, стандартизировано ли это поведение?

Да. [Class.copy]/p7:

Если определение класса не явно объявить конструктор копирования , один объявлен неявно. Если определение класса объявляет конструктор перемещения или перемещает оператор присваивания, конструктор неявно объявленной копии определяется как удаленный; ...

...

Потому что я не имею такое же поведение в GCC.

Какая версия? Я бы догадался, что последняя версия gcc имеет такое же поведение, как и clang. Но у меня нет возможности экспериментировать.

+0

Поддержка Clang для дефолтных функций, по крайней мере, достаточно хороша, что они утверждают, что поддерживают их на своей странице статуса C++. Обычно вы, ребята, не перечисляете функции, для которых еще предстоит сделать существенную работу. – bames53

+0

Что делать, если конструктор перемещения определяется как удаленный, будет ли неявно объявленный конструктор копирования также определен как удаленный? – user1095108