2012-09-14 18 views
6

Presupuesto de n3337 12.3.1/3implícito constructor de copia

una copia no explícita/mover constructor (12.8) es un constructor de conversión. Un constructor de copia/movimiento implícitamente declarado no es un constructor explícito ; puede ser llamado para conversiones de tipo implícito.

Presupuesto de ANSI ISO IEC 14882 2003

Un constructor de copia no explícita (12.8) es un constructor de conversión. Un constructor de copia implícitamente declarado no es un constructor explícito; puede requerir conversiones de tipo implícito.

no tengo las ideas, cómo copy-constructor puede ser utilizado para implicit tipo conversions. Y si es un error de impresión/error en el estándar, ¿por qué no se corrige desde el estándar C++ 03? Todos los enlaces y ejemplos (si podemos usarlo para type conversions) son realmente apreciados.

+1

+1 por hacer la pregunta. Incluso tuve esta duda después de leer el texto estándar citado en su respuesta en el otro tema. – Nawaz

Respuesta

8

un constructor de copia puede convertir de un objeto de un tipo derivado por cortado de ella:

struct A {}; 
struct B : A {}; 

B b; 
A a = b; // uses A::A(A const&) to convert B to A 
+1

Lo que hace que los constructores de copia sean intrínsecamente peligrosos cuando se ignoran. Una buena práctica es que, a menos que los desee, debe evitar los Copy Constructors y los Asignment Operators predeterminados. Antes de C++ 11, esto podría hacerse declarándolos privados y no implementándolos (ayuda a comentar que está haciendo esto). En C++ 11, puede reemplazar la implementación con '= delete'. –

+5

@JonathanSeng: Ese es un enfoque. Prefiero evitar la herencia de tipos no abstractos, por lo que no es posible cortar. Rara vez hay una buena razón para heredar de otra cosa que no sea una interfaz abstracta. –

0

En implict inlining la función miembro inline se define dentro de la clase definition.the inline palabra clave no se usa

Cuestiones relacionadas