Domanda

In Qt, entrambi sono validi e comportano lo stesso:

emit someSignal(value);
.

vs

emit(someSignal(value));
.

C'è qualche differenza?

È stato utile?

Soluzione

.

C'è qualche differenza?

Non c'è differenza diversa dalla staffa esterna inutile, quindi i programmatori lo preferiranno, ed è anche usato più convenzionalmente nei progetti QT là fuori.

Il motivo della nostra differenza è dovuto a questo:

# define emit
.

Puoi vedere la definizione di questo Nel codice sorgente .

Pertanto, è sostanzialmente dichiarato solo una stringa "vuota" e il preprocessore sostituirà le varianti su:

someSignal(value);
.

o

(someSignal(value));
.

Puoi vederlo se stessi se, per un test rapido, interrompi l'esecuzione del compilatore dopo che il preprocessore è eseguito, ad es. L'opzione -E in caso di GCC.

Ulteriori informazioni: qualcuno nel commento aveva dubbi sulla parola chiave Emit perché inquinano lo spazio dei nomi macro globali. Questo è vero, ma è un buon modo per assicurarti che ci sia un modo comune di fare questo che è una buona cosa.

D'altra parte, questo non è obbligatorio, quindi chiunque potesse ridefinire, non perfinisce o addirittura lo spegnere raccontando qt non usare parole chiave come segue:

CONFIG += no_keywords
.

In questo modo, potrebbe essere ancora possibile utilizzare il meccanismo di slot del segnale QT con Q_SIGNAL, Q_SIGNALS, Q_SLOT, Q_SLOTS, Q_EMIT e tutto questo.

Qui puoi trovare il documentazione corrispondente su Q_EMIT, Ad esempio:

.

q_emit

Utilizzare questa macro per sostituire la parola chiave EMIT per emettere segnali, quando si desidera utilizzare segnali e slot QT con un meccanismo di segnale / slot di 3a partito.

La macro viene normalmente utilizzata quando No_Keywords è specificato con la variabile di configurazione nel file .pro, ma può essere utilizzato anche quando no_Keywords non è specificato.

Altri suggerimenti

Non c'è differenza.Infatti, emit è definito come una macro vuota, quindi solo

someSignal(value);
.

è anche equivalente.Il emit rende solo più ovvio che stai attivando un segnale QT.

Non c'è assolutamente alcuna differenza.È una definizione vuota del preprocessore e quindi viene rimossa prima che il compilatore arrivi per vedere il codice.Per quanto riguarda il compilatore, non esiste nemmeno.

Esiste puramente a beneficio del programmatore, per fargli sapere che a quel punto, un segnale potrebbe essere elaborato e potrebbe aiutare nel debug del codice.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top