gpt4 book ai didi

c++ - 为什么将成员函数指针与 NULL 进行比较会产生警告?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:25:35 25 4
gpt4 key购买 nike

以下代码在 Windows、Mac 和 iOS 上编译时没有警告:

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 定义为 ((void*)0),您可能会收到警告。对象指针与函数指针类型不兼容。使用普通的 0 而不是 NULL0 是一个与函数指针和对象指针类型兼容的空指针常量。

编辑 抱歉,我没有注意。这里有一个成员函数指针,而不仅仅是一个函数指针。将一个与 ((void*)0) 进行比较也是违反规则的,许多编译器将对此发出错误,而不仅仅是警告。

EDIT 2 对于所有发表评论的人:我知道符合规范的 C++ 编译器不会将 NULL 定义为 ((void*)0)。问题是那里有不合格的编译器和损坏的第三方库(我都见过)。

关于c++ - 为什么将成员函数指针与 NULL 进行比较会产生警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7192306/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com