Cuál es el significado del operador de dos puntos (:) en "uint isWidget: 1;" en Qt? Es "uint isWidget: 1;" equivalente a "uint isWidget (1)"?Cuál es el significado del operador de dos puntos (:) en "uint isWidget: 1;" en Qt?
El código en Qt es
QObjectData
{
public:
virtual ~QObjectData() = 0;
QObject *q_ptr;
QObject *parent;
QObjectList children;
uint isWidget : 1;
uint pendTimer : 1;
uint blockSig : 1;
uint wasDeleted : 1;
uint ownObjectName : 1;
uint sendChildEvents : 1;
uint receiveChildEvents : 1;
uint inEventHandler : 1;
uint inThreadChangeEvent : 1;
uint hasGuards : 1; //true iff there is one or more QPointer attached to this object
uint unused : 22;
int postedEvents;
QMetaObject *metaObject; // assert dynamic
};
Dado que son campos de bits como descritos en las respuestas a continuación, probablemente se estén utilizando como booleanos, pero con el compilador se les pidió específicamente que los empaquetaran todos en una palabra de 32 bits (tenga en cuenta 10 bits utilizados y 22 explícitamente sin usar). El compilador puede o no cumplir. Embalaje como este no es obligatorio para bool porque en la mayoría de las CPU es más lento operar en un solo bit (posiblemente involucrando valores de entrada y salida dentro y fuera), por lo que cada bool puede tener un carácter independiente o incluso una palabra .... –
"¿Cuál es el significado de dos puntos (:) operador en" uint esWidget: 1; "en Qt?" debería ser Cuál es el significado del operador de dos puntos (:) en "uint isWidget: 1;" en C++? El lenguaje sigue siendo C++, Qt es solo un conjunto de bibliotecas :) –
Comentario lateral: sería equivalente, si tal vez menos legible, si el último campo de bits 'int no utilizado: 22;' se deletreara como 'int: 22' (como siempre y cuando no esté en uso. Además, también sería equivalente si no estuviera presente por completo (el compilador no puede reutilizar esos 22 bits para contener parte del atributo 'postingEvents') –