tipos sobrecarga que programacion ejemplo dinamico destructores constructores clases c++ constructor value-initialization

c++ - sobrecarga - ¿Los tipos incorporados tienen constructores por defecto?



sobrecarga de constructores en c++ (3)

Después de leer this artículo, hice una observación de que int () produce 0 porque el int temporal es el valor inicializado y no porque int() llama al constructor predeterminado para int . (El artículo es defectuoso según mi entendimiento).

También dije que los tipos primitivos (incorporados) no tienen constructores. El autor original me pidió que verificara la Sección $ 10.4.2 (TC ++ PL) que dice

Los tipos incorporados también tienen constructores por defecto ($ 6.2.8)

Pero todavía creo que la afirmación "C ++ permite que incluso el tipo incorporado (tipos primitivos) tenga constructores por defecto". está defectuoso (según C ++ 03).

Creo que Bjarne en TC ++ PL ha mezclado "constructor like notting ie () " con una llamada de constructor real. La inicialización del valor no se introdujo en ese momento cuando Bjarne estaba escribiendo el libro, ¿verdad? Entonces, ¿el texto en TC ++ PL es incorrecto según C ++ 98 y C ++ 03?

¿Qué piensan ustedes?

EDITAR

Le pregunté a Bjarne personalmente (por correo) sobre el texto defectuoso en TC ++ PL y esta fue su respuesta

Creo que mezclan "llamadas de constructor reales" con conceptualmente tener un constructor. Se considera que los tipos incorporados tienen constructores (cualquiera que sea el uso estándar para describir su comportamiento).



Respuesta simple: técnicamente no.

Respuesta larga:

No.
Pero la sintaxis que utiliza para inicializarlos los hace parecer que están siendo construidos por un constructor predeterminado o un constructor de copia predeterminado.

int x(5); // Looks like a constructor. Behaves like one: x is initialized. int y(); // Fail. Actually a function declaration. // BUT int z = int(); // Looks like a constructor. Behaves like a constructor (0 init). int a(b); // Again.

Entonces, técnicamente, no hay constructores para los tipos básicos de POD. Pero para todos los efectos, actúan como si tuvieran un constructor de copia y un constructor predeterminado (cuando se inicializan con los paréntesis).

Si parece un pato y grazna como un pato, entonces es como pato.


Un constructor es una función miembro (los constructores están completamente especificados en la cláusula 12 del Estándar C ++, que cubre funciones especiales de miembros como constructores y destructores).

Una función miembro solo puede definirse para un tipo de clase (C ++ 03 9.3 / 1 dice "Las funciones declaradas en la definición de una clase, excluidas las declaradas con un especificador amigo, se denominan funciones miembro de esa clase").

Por lo tanto, los tipos que no son de clase (incluidos los tipos fundamentales, los tipos de matriz, los tipos de referencia, los tipos de puntero y los tipos de enumeración) no tienen constructores.

No tengo una copia de The C ++ Programming Language para leer el contexto de la cita que dice "Los tipos incorporados también tienen constructores por defecto", pero supongo que Stroustrup está usando el término "constructor" en un suelto, no -el sentido técnico, o el significado del término o la forma en que se utiliza en el Estándar cambió entre el momento en que se publicó el libro y cuando el lenguaje fue estandarizado. Supongo que el primero es mucho más probable que el segundo.