Acabo de ver un fragmento de código con una sintaxis que nunca he visto antes. ¿Qué significa bool start : 1;
? Lo encontré dentro de una definición de clase en un archivo de encabezado.Pregunta simple de sintaxis de C++ sobre colon
Respuesta
struct record {
char *name;
int refcount : 4;
unsigned dirty : 1;
};
Esos son campos de bits; el número da el tamaño exacto del campo, en bits. (Consulte cualquier libro completo sobre C para obtener más detalles.) Los campos de bits se pueden usar para ahorrar espacio en estructuras que tienen varios indicadores binarios u otros campos pequeños, y también se pueden usar en un intento de ajustarse a diseños de almacenamiento impuestos externamente. (Su éxito en la última tarea se ve mitigado por el hecho de que los campos de bits se asignan de izquierda a derecha en algunas máquinas y de derecha a izquierda en otras).
Tenga en cuenta que la notación de dos puntos para especificar el tamaño de un campo en bits solo es válida en estructuras (y en uniones); no puede usar este mecanismo para especificar el tamaño de las variables arbitrarias.
- Referencias: K & R1 seg. 6,7 pp. 136-8
- K & R2 Sec. 6.9 pp. 149-50
- ISO Sec. 6.5.2.1
- H & S Seg. . 5.6.5 pp 136-8
Es un campo de bits. : 1 significa que se usa un bit. véase, por ejemplo http://msdn.microsoft.com/en-us/library/ewwyfdbe(VS.71).aspx
Significa que start
es 1 bit de ancho, en contraposición a la normal bool
que es de 1 byte de largo. Puede empaquetar múltiples variables más pequeñas en una variable más grande y el compilador generará todo el código necesario para leerlo/escribirlo. Recibirá un golpe de rendimiento (notable), pero, si lo usa correctamente, usará mucha menos memoria.
Esto hace que el miembro de start
en un campo de bits, con 1 bit de espacio reservado.
Es válido sólo para miembros de la estructura/clase, no se puede tener una variable de campo de bits.
Ver la entrada de Wikipedia sobre Bit Fields. Le dice al compilador cuántos bits debe ocupar el miembro de la estructura.
Esta es la sintaxis para bit fields
En esencia, se define un campo de una estructura para tener sólo unos pocos bits de un byte completo o short o int.
Varios campos de bits pueden compartir el mismo int, por lo que este método se puede utilizar como una forma inteligente de evitar algunas manipulaciones de bits en la construcción de valores.
Es un bit-field. Pero nunca intenté hacer bit-fields en boolean.
Esta es la sintaxis para describir bit fields. Esta es una forma de empaquetar más información en una cantidad menor de almacenamiento. Mientras que normalmente un bool tomaría al menos un byte (probablemente más) para representar, mediante el uso de campos de bits, puede combinar varios bools en un byte con una sintaxis simple.
Ten cuidado. Como una de las áreas menos conocidas del idioma, puede encontrarse con casos de esquina cuando los usa.Por ejemplo, las estructuras de datos así producidas probablemente no son portátiles entre los tipos de procesadores.
- 1. Pregunta simple sobre java SimpleDateFormat
- 2. Pregunta simple sobre la tupla de scala
- 3. C# polimorfismo simple pregunta
- 4. Ruby colon hash sintaxis resaltado
- 5. Pregunta simple de sintaxis de fecha Oracle SQL
- 6. Pregunta sobre C# covarianza
- 7. Xcode. Pregunta sobre la comprobación de error de sintaxis
- 8. Pregunta simple: Reflexiones en C#
- 9. C# simple SI O pregunta
- 10. Pregunta simple de LINQ en C#
- 11. una pregunta simple sobre el cierre de jquery
- 12. Pregunta sobre const_cast en C++
- 13. Pregunta sobre C#, servidores, XML
- 14. Pregunta sobre C++ clase interna
- 15. pregunta sobre? y: en C++
- 16. Pregunta sobre C# 4.0 genéricos de covarianza
- 17. Una pregunta sobre la sintaxis de la plantilla C++ (código fuente de la biblioteca STL)
- 18. C# delegado y atributos pregunta sintaxis
- 19. F # Sintaxis Pregunta
- 20. pregunta simple análisis
- 21. Mystical "F colon" en C#
- 22. pregunta básica sobre C# - ¿necesito un espacio de nombres?
- 23. Estilo pregunta sobre pieza de código existente (C/C++)
- 24. Pregunta de conversión C++ a Java sobre extern "C"
- 25. Pregunta simple de fecha y hora sql
- 26. Pregunta de sintaxis: @ Html.LabelFor (m => m.UserName)
- 27. Nuevo en C++. Pregunta sobre punteros constantes
- 28. Pregunta sobre copia superficial en C++
- 29. Pregunta sobre punteros y cadenas en C
- 30. Pregunta sobre la optimización en C++
Rendimiento de qué? Supongo que el proceso de compilación se ralentiza (lo que no debería ser un problema), ¿pero también se ralentiza el rendimiento del tiempo de ejecución? – Oxymoron
Sí, en el tiempo de ejecución cada acceso que realice a estas variables (ya sea de lectura o escritura) tiene que traducirse a accesos a nivel de bit. Por ejemplo, si lee una de estas cosas, primero tiene que cargar el campo grande en un registro, Y lo hace con una máscara y luego cambia a la derecha, que es al menos 3 veces más lento que una lectura normal. Lo mismo ocurre con la escritura. – Blindy
Se pone aún peor con los campos de bits de límites cruzados, tienen que combinarse, doblando la cantidad de trabajo (si no se ignoran por completo). – Blindy