Ho appena trovato l'esistenza di qt_noop()
definisco nella qglobal.h come:Qual è lo scopo di `qt_noop`
inline void qt_noop() {}
Qual è il punto di esso?
Ho appena trovato l'esistenza di qt_noop()
definisco nella qglobal.h come:Qual è lo scopo di `qt_noop`
inline void qt_noop() {}
Qual è il punto di esso?
Lo so che è utilizzato internamente in alcune macro che dovrebbero fare qualcosa solo per build di debug, ad esempio:
# ifndef QT_NO_DEBUG
# define Q_ASSERT(cond) ((!(cond)) ? qt_assert(#cond,__FILE__,__LINE__) : qt_noop())
# else
# define Q_ASSERT(cond) qt_noop()
# endif
#endif
Quindi il suo unico scopo è usare l'operatore ternario (perché non un singolo se?) Poiché potrebbe essere omesso nella seconda definizione? – gregseth
Non può essere omesso in 2a definizione. La macro Q_ASSERT viene solitamente utilizzata come normale chiamata di funzione, ad esempio 'Q_ASSERT (xxx == yyy);'. Quindi la macro deve espandersi al codice che può essere seguito con punto e virgola senza errori/avvertimenti. Per quanto riguarda il "singolo se", ci sono alcuni problemi con le macro che contengono se sono usati all'interno di altre istruzioni if senza parentesi (vedi http://www.parashift.com/c++-faq-lite/misc-technical-issues. html # faq-39.4), quindi l'operatore ternario potrebbe essere un'idea migliore qui. – chalup
Accettato più per il commento e il link rispetto alla risposta ... comunque, grazie! :) – gregseth
+1 Per la domanda ... – mosg
* noop * - * no op * - Nessuna operazione –
Precisamente! Perché preoccuparsi di creare una funzione che ... nulla! – gregseth