下面的代码位编译没有用于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