¿Cuáles son los valores predeterminados para miembros de una estructura y miembros de una clase en C++ y cómo difieren estas reglas (por ejemplo, entre clases/estructuras/primitivas/etc.)? ¿Hay circunstancias en las que difieran las reglas sobre los valores predeterminados?Cuál es el valor predeterminado para miembros de clase C++
Respuesta
No hay diferencias entre las estructuras y las clases en este sentido en C++. Todos se llaman simplemente clase tipos.
Los miembros de los tipos de clase no tienen valores predeterminados en el caso general. Con el fin de para un miembro de la clase para obtener un valor determinista que tiene que ser inicializado, que puede ser realizado por
- constructor por defecto de la pieza en sí
- Constructor lista de inicialización de la clase envolvente
- Inicializador explícitamente especificado para el objeto de la clase adjunta (que incluye inicialización de valor e inicialización con inicializador agregado).
Además, todos los objetos con duración de almacenamiento estática se inicializan al inicio del programa.
Aparte de los casos anteriores, los miembros de la clase, una vez más, no tienen valores predeterminados e inicialmente contendrán valores de basura impredecibles.
Si el almacenamiento estático se inicializa en cero, dependerá del sistema operativo que esté ejecutando. – jpyllman
@jpyllman: No. El almacenamiento estático siempre se inicializa en cero. Está garantizado (requerido) por el idioma, independientemente de cualquier sistema operativo. – AnT
OK, traté de encontrar esa información pero no la encontré. Siempre he supuesto que no está definido a menos que establezca algún valor. – jpyllman
Sí, hay uno. Si inicializa un objeto con el constructor por defecto y utilizar paréntesis, a continuación, los miembros de la cápsula será inicializado a cero:
someClass * p = new someClass();
Esta afirmación no es verdadera. Es muy dependiente de quién escribió el compilador. No hay nada en el estándar que diga que un valor POD se inicialice a nada a menos que el programador le haya asignado un valor. Esta es la razón por la que existen herramientas de desarrollo como valgrind. – WhoCares
@DamianDixon No, consulte lo siguiente: 'C++ 14 8.5 11' *" Un objeto cuyo inicializador es un conjunto vacío de paréntesis, es decir,(), se inicializará con el valor. "*. '8.5 8' *" Valorizar-inicializar un objeto de tipo T significa: ... si T es un tipo de clase (posiblemente calificado para CV) sin un constructor predeterminado proporcionado por el usuario o eliminado, entonces el objeto tiene cero inicialización ... "*' 8.5 6' * "Inicializar a cero un objeto o referencia de tipo T significa: ... - si T es un tipo de clase no sindicalizada (posiblemente cv calificado), cada miembro de datos no estático y cada subobjeto de clase base tiene cero inicialización ... "* – HolyBlackCat
@HolyBlackCat, Sin embargo, debe utilizar un paréntesis vacío. Si no agrega(), es decir, proporciona algún tipo de inicialización, entonces no obtiene este comportamiento y termina con un POD no inicializado. Entonces el programador tiene que hacer algo para inicializar la variable. – WhoCares
- 1. ¿Cuál es el valor booleano predeterminado en C#?
- 2. ¿Cuál es el constructor predeterminado para el puntero de C++?
- 3. ¿Cuál es el valor predeterminado para un campo si no se proporciona un valor predeterminado?
- 4. C valor predeterminado constructor # Clase pregunta
- 5. C#: ¿Cómo establecer el valor predeterminado para una propiedad en una clase parcial?
- 6. ¿Cuál es el valor predeterminado (IEnumerable <T>)?
- 7. ¿Cuál es el valor predeterminado de un iterador?
- 8. ¿Cuál es el modificador de acceso predeterminado de una clase?
- 9. Valor predeterminado para bool en C++
- 10. C# unsigned int valor predeterminado
- 11. En C#, ¿se genera un constructor predeterminado cuando se inicializan los miembros de la clase?
- 12. ¿Cuál es el comportamiento predeterminado del Método Equals?
- 13. ASP.NET web.config: ¿Cuál es el valor predeterminado para el atributo de depuración en system.web.compilation?
- 14. Objective-C establece el valor predeterminado para una propiedad
- 15. ¿Cuál es el enlace predeterminado de WCF?
- 16. ¿Cuál es el generador predeterminado para CMake en Windows?
- 17. Valor predeterminado para bool en C#
- 18. Clase C# y miembros de solo lectura
- 19. ¿Miembros genéricos de la clase en C#?
- 20. ¿Cuál es el método predeterminado de HTTP?
- 21. ¿Cuál es el ScaleType predeterminado de ImageView?
- 22. C# cómo establecer el valor predeterminado dropDownList para selectedValue = null
- 23. Valor predeterminado de BOOL
- 24. Valor predeterminado para el parámetro de función?
- 25. Valor predeterminado para el constructor de atributos?
- 26. Valor predeterminado para la clase definida por el usuario en C#
- 27. ¿Cuál es la sintaxis para un constructor predeterminado para una clase genérica?
- 28. ¿El valor predeterminado es int * NULL?
- 29. Objective-C valor de argumento predeterminado
- 30. ¿Cuál es el __hash__ predeterminado en python?
Vea también: http://stackoverflow.com/questions/1613341/what-do-the-following-phrases-mean-in-c-zero-default-and-value-initializati, http: // stackoverflow. com/questions/2417065/c-does-the-default-constructor-initialize-built-in-types, http://stackoverflow.com/questions/1069621/are-members-of-ac-struct-initialized-to- 0-por-defecto – outis