W Qt, oba z nich są ważne, i zachowują się tak samo:Różnica między emitować oraz emitują()
emit someSignal(value);
vs
emit(someSignal(value));
Czy jest jakaś różnica?
W Qt, oba z nich są ważne, i zachowują się tak samo:Różnica między emitować oraz emitują()
emit someSignal(value);
vs
emit(someSignal(value));
Czy jest jakaś różnica?
Czy są jakieś różnice?
Nie ma różnicy poza nawiasem zewnętrznym, który jest niepotrzebny, więc programiści będą to preferować, a także jest on bardziej konwencjonalnie stosowany w projektach Qt.
Powodem jest bez różnicy ze względu na to:
# define emit
Można zobaczyć definicję tego in the source code.
Dlatego też w zasadzie tylko zadeklarowane do „pustej” string i preprocesora zastąpi warianty:
someSignal(value);
lub
(someSignal(value));
można zobaczyć to samemu, jeśli na szybkie test, zatrzymujesz wykonywanie kompilatora po uruchomieniu preprocesora, np opcja -E
w przypadku gcc.
Więcej informacji: ktoś w komentarzu miał wątpliwości co do emitowanego słowa kluczowego, ponieważ zanieczyszcza globalną przestrzeń nazw makr. To prawda, ale jest to dobry sposób na zapewnienie, że istnieje pewien wspólny sposób robienia tego, co jest dobre.
Z drugiej strony, nie jest to obowiązkowe, więc każdy może na nowo zdefiniować, Undefine lub nawet wyłączając go by telling Qt, aby nie używać słowa kluczowe w następujący sposób:
CONFIG += no_keywords
ten sposób, może być nadal możliwe użyj mechanizmu szczeliny sygnału Qt z Q_SIGNAL
, Q_SIGNALS
, , Q_SLOTS
,i wszystkimi podobnymi.
Tutaj można znaleźć corresponding documentation o Q_EMIT
, na przykład:
Q_EMIT
Użyj tego makro zastąpienie słowa kluczowego emitują do emitowania sygnałów, gdy chcesz użyć Qt sygnały i sloty z Zewnętrzny mechanizm sygnału/szczeliny.
Makro jest zwykle używane, gdy no_keywords jest określone zmienną CONFIG w pliku PROpro, ale można go używać nawet wtedy, gdy nie podano parametru no_keywords.
Nie ma różnicy. W rzeczywistości, emit
jest zdefiniowany jako pusty makro, więc po prostu
someSignal(value);
jest równoważne. emit
po prostu czyni bardziej oczywistym, że uruchamiasz sygnał Qt.
Nie ma absolutnie żadnej różnicy. Jest to pusta definicja preprocesora, która zostaje usunięta, zanim kompilator zobaczy kod. Jeśli chodzi o kompilator, to nawet nie istnieje.
Istnieje tylko dla dobra programisty, aby dać mu znać, że w tym momencie sygnał może zostać przetworzony i może pomóc w debugowaniu kodu.
OK, teraz zorientowałem się, że rzeczywiście 'moc' również ignoruje' emitowanie' (chociaż dokumentacja bardzo dobrze ukrywa ten fakt). Moja nowa teoria (aby nie stracić wiary w programistów QT) jest taka, że wcześniejsza implementacja mechanizmu szczeliny sygnału rzeczywiście * potrzebowała * tego słowa kluczowego i została zachowana ze względu na kompatybilność wsteczną (i prawdopodobnie nie dokumentowała na wypadek, gdyby potrzebowali go ponownie do późniejszej wersji). W każdym razie fakt, że cała ich dokumentacja używa "emitowania" bez nawiasów sugeruje, że jest to dobry pomysł (czytaj, bardziej przyszłościowy), aby pominąć je również w swoim kodzie. – celtschk
@celtschk Nie ma potrzeby, aby 'moc' używał słowa kluczowego' emit', ponieważ 'moc' generuje implementację metody sygnału. W końcu sygnał jest po prostu metodą, która iteruje podłączone gniazda i aktywuje (wywołuje) je. IIRC, w wydanych wersjach Qt był * nigdy * czas, gdy słowo kluczowe 'emit' zostało użyte przez' moc'. To słowo kluczowe jest dla * ciebie * do udokumentowania * twojego * kodu. Jest przeznaczony wyłącznie do spożycia przez ludzi, a ja, na przykład, cieszę się, że on tam jest. Nie mam pojęcia, co ukrywa dokumentacja, to całkiem oczywiste, bez żadnej dokumentacji, jak działają sygnały. To podstawowe C++. –