El siguiente fragmento de código se compila sin advertencia para Windows, Mac y iOS:¿Por qué la comparación de un puntero de función miembro a NULL genera una advertencia?
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)();
}
}
};
Por qué se genera esa advertencia y qué se puede hacer al respecto?
Es un buen estilo de comparar cosas con 'null', no se pueden comparar' null' con cosas Cambia el orden: 'if (m_callback == NULL)' –
Es un truco muy conocido escribir 'if (0 == x)' de modo que si confundes '==' con '=', romperás la compilación, no acaba de recibir una advertencia (o nada). – hamstergene
Algunas pautas indican que coloque la constante en el lado izquierdo de la comparación para evitar asignaciones erróneas. Creo que no vale la pena, pero hay otras opiniones. – Simon