下面的代碼位編譯沒有用於Windows,Mac和iOS警告:爲什麼將成員函數指針與NULL比較會生成警告?
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)();
}
}
};
爲什麼產生的警告,我能做些什麼呢?
這是很好的風格'NULL'比較的東西,比不上'NULL'與事物。切換順序:'if(m_callback == NULL)' –
編寫'if(0 == x)'是一個衆所周知的技巧,所以如果您將'=='與'='混淆,那麼您會中斷編譯,而不是隻是得到一個警告(或沒有)。 – hamstergene
一些指導方針表示將常數置於比較的左側以避免誤分配。我認爲它不值得,但還有其他意見。 – Simon