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

c – 为什么将成员函数指针与NULL进行比较会产生警告?,第1张

概述对于 Windows,Mac和iOS,以下代码编译时没有警告: class MyClass { SomeOtherClass * m_object; void (SomeOtherClass::*m_callback)();public: MyClass(SomeOtherClass * _object,void (SomeOtherClass::*_callback)( 对于 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)();        }    }};

为什么会产生警告,我该怎么办呢?

解决方法 我不认为你可以将0(或NulL)与成员函数指针进行比较,特别是因为它们可能实际上不是指针(例如,当函数是虚函数时).

就个人而言,我会在没有比较的情况下重写if测试,例如:

voID DoStuff() {    if (m_callback) {        (m_object->*m_callback)();    } else {        m_object->DonormalCallback();    }}

并且,对于奖励积分,在构造函数中执行此测试.

class MyClass {    SomeOtherClass * m_object;    voID (SomeOtherClass::*m_callback)();public:    MyClass(SomeOtherClass * _object,m_callback(_callback)    {         // Use "DonormalCallback" unless some other method is requested.         if (!m_callback) {             m_callback = &SomeOtherClass::DonormalCallback;         }    }    voID DoStuff() {        (m_object->*m_callback)();    }};
总结

以上是内存溢出为你收集整理的c – 为什么将成员函数指针与NULL进行比较会产生警告?全部内容,希望文章能够帮你解决c – 为什么将成员函数指针与NULL进行比较会产生警告?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1258445.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存