Il seguente pezzo di codice compila senza preavviso per Windows, Mac e iOS:Perché il confronto di un puntatore della funzione membro su NULL genera un avviso?
class MyClass {
SomeOtherClass * m_object;
void (SomeOtherClass::*m_callback)();
public:
MyClass(SomeOtherClass * _object,void (SomeOtherClass::*_callback)()=NULL) :
m_object(_object),m_callback(_callback) {}
void DoStuff() {
//generates warning: NULL used in arithmetic when compiling with the Android NDK
if (NULL==m_callback) {
m_object->DoNormalCallback();
} else {
(m_object->*m_callback)();
}
}
};
Perché viene generato questo avvertimento e che cosa posso fare?
E 'bello stile per confrontare le cose con 'null', non confrontare' null' con le cose Cambia l'ordine: 'if (m_callback == NULL)' –
È risaputo che il trucco è scrivere if (0 == x) 'in modo che se confondi' == 'con' = ', interromperai la compilazione, non ricevi un avvertimento (o niente). – hamstergene
Alcune linee guida stanno dicendo di mettere la costante sul lato sinistro del confronto per evitare assegnazioni errate. Penso che non ne valga la pena, ma ci sono altre opinioni. – Simon