Qual è il significato dell'operatore colon (:) in "uint isWidget: 1;" a Qt? "Uint èWidget: 1;" equivalente a "uint isWidget (1)"?Qual è il significato dell'operatore colon (:) in "uint isWidget: 1;" a Qt?
Il codice in Qt è
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
};
Dato che sono campi di bit come descritti nelle risposte qui sotto, sono probabilmente usati come booleani, ma con il compilatore specificamente richiesto di comprimerli tutti in una parola a 32 bit (nota 10 bit usati e 22 esplicitamente inutilizzati). Il compilatore potrebbe o potrebbe non essere conforme. Il confezionamento di questo tipo non è obbligatorio per il bool perché sulla maggior parte delle CPU è più lento operare su un singolo bit (possibilmente coinvolgendo i valori di & -ing e | -ing in/out), quindi ogni bool potrebbe essere un dato char indipendente o addirittura una parola .... –
"Qual è il significato dell'operatore colon (:) in" uint isWidget: 1; "in Qt?" dovrebbe essere Qual è il significato dell'operatore colon (:) in "uint isWidget: 1;" in C++? Il linguaggio è ancora C++, Qt è solo un insieme di librerie :) –
Commento laterale: sarebbe equivalente, se forse meno leggibile, se l'ultimo bitfield 'int inutilizzato: 22;' è stato scritto come 'int: 22' (come Inoltre, sarebbe anche equivalente se non fosse presente del tutto (il compilatore non può riutilizzare quei 22 bit per mantenere una parte dell'attributo 'postedEvents') –