Estoy aprendiendo C++ desde cero, y como tal no tengo una comprensión experta de C. En C++, no se puede convertir un puntero nulo en lo que sea, y entiendo las razones detrás de eso. Sin embargo, sé que en C, puedes. ¿Cuáles son las posibles razones para esto? Parece que es un gran agujero en la seguridad del tipo, lo que (para mí) parece algo malo.¿Cuáles son las razones para emitir un puntero vacío?
Respuesta
Puede convertir void*
en otro puntero en ambos languages. Quizás quisiste decir implícitamente.
Es muy conveniente en C no tener que ser explícito al respecto. En C++ tenemos plantillas, por lo que para escribir código genérico no hay necesidad de fundición void*
y otras cosas. En C no hay otra opción. Un contenedor genérico tiene que contener void*
a los objetos, y es mucho más fácil decir repetidamente mydata* d = node;
, entonces es mydata* d = (mydata*)node;
.
Así que es más o menos como dijiste. En C, la seguridad en general no recibió tanto énfasis como lo hizo en C++, especialmente cuando se trataba de void*
porque se suponía que era un simple indicador genérico de lo que sea. No hay necesidad de eso en C++, así que mejor explícalo cuando lo estés tratando.
Una razón: si usa sort
para ordenar una matriz de estructuras, y tiene una función de comparación para las dos estructuras, necesitará convertir los punteros vacíos en punteros a las estructuras para acceder a los miembros de la estructura.
¿Cuáles son las posibles razones para [emitir un puntero
void *
en C]? ¿No es este un agujero gigante en seguridad tipo?
Es la única forma posible de admitir el polimorfismo, también conocido como programación genérica. No hay otra forma de hacer, por ejemplo, una tabla hash genérica. El polimorfismo en C es tremendamente inseguro, pero es el único polimorfismo que existe.
Se alegra que C++ tenga polimorfismo paramétrico (una de las muchas funciones de las plantillas).
- 1. ¿Cuáles son las razones para la subclasificación de NSArrayController?
- 2. ¿Cuáles son las razones para que las Excepciones no sean compatibles con las cláusulas throws?
- 3. ¿Cuáles son algunas de las razones por las cuales un único desarrollador debe usar TDD?
- 4. Además de singletons, ¿cuáles son algunas de las razones convincentes para usar métodos estáticos en PHP?
- 5. ¿Cuáles son las razones para usar dos programas por lotes en Windows?
- 6. ¿Cuáles son buenas razones para elegir TIMESTAMP sobre las columnas DATETIME en MySQL?
- 7. ¿Cuáles son las razones originales para ToString() en Java y .NET?
- 8. ¿Cuáles son las razones para usar el atributo de id con fines de CSS?
- 9. ¿Cuáles son las razones para usar "syscall" en lugar de llamar a la función directamente?
- 10. ¿Cuáles son las razones imperiosas para elegir SQL Server 2008 en 2005?
- 11. Cuándo usar un puntero de vacío?
- 12. ¿Cuáles son las configuraciones más comunes donde las escrituras del puntero no son atómicas?
- 13. Razones para las diferencias SQL
- 14. ¿Cuáles son las operaciones soportadas por puntero sin formato y puntero de función en C/C++?
- 15. ¿Cuáles son las bibliotecas comunes para C?
- 16. ¿Cuáles son las herramientas ágiles para PHP?
- 17. ¿Cuáles son las reglas para usar^para apuntar al valor?
- 18. ¿Cuáles son las razones de peso para usar un MemoryCache sobre una llanura de edad Dictionary <string, object>
- 19. ¿Cuáles son las razones por las que un sitio web "simple" no elige Alojamiento basado en la nube?
- 20. Razones para que un IBOutlet sea nulo
- 21. ¿Cuáles son las especificaciones para un archivo .obj de Wavefront?
- 22. ¿Cuáles son las mejores prácticas para registrar un error?
- 23. ¿Cuáles son algunas de las desventajas de usar una referencia en lugar de un puntero?
- 24. Cuáles son las posibles razones detrás de "log4j: Error No se pudo encontrar el valor para la clave log4j.appender.SQL_APPENDER"
- 25. código de error (-11) :: ¿Cuáles son todas las posibles razones para obtener el error "cl_build_program_failure" en OpenCL?
- 26. Las razones para actualizar de Delphi 2009
- 27. ¿Cuáles son las razones por las cuales el uso de la CPU no llega al 100% con C# y APM?
- 28. ¿Cuáles son las razones para usar o no usar el gettext nativo de PHP versus una autoconstrucción?
- 29. ¿Cuáles son las razones técnicas para evitar inyectar el contenedor de servicio en lugar de los servicios individuales?
- 30. Cómo declarar un puntero vacío en C#
¡Gran respuesta, gracias! – Maulrus