zoukankan      html  css  js  c++  java
  • 非static成员函数通过类名::来调用,空指针调用成员方法不出错!

    首先来看这一段代码:

    #include <iostream>
    
    using namespace std;
    
    class A{
    public:
        int k;
        void p1(){
           cout<<"p1"<<endl;
        }
    };
    
    int main(){
        cout<<"test"<<endl;
        A *a = 0;
        a->p1();
        return 0;
    }

    上面的代码竟然不会出错!

    using namespace std;
    
    class A{
    public:
        int k;
        void p1(){
           cout<<"p1 k="<<k<<endl;
        }
    };
    
    int main(){
        cout<<"test"<<endl;
        A *a = 0;
        a->p1();
        return 0;
    }

    这段代码就会出错了。

    //函数定义
    AudioHardwareInterface* AudioHardwareInterface::create()
    //函数调用
    mAudioHardware = AudioHardwareInterface::create();
    (来自Android2.2源码)

    上面的代码也是合法的。

    原因何在?

          对于任何非静态的函数,只要是内部不含有非静态成员变量都可以用类名来进行调用。如果其内部含有非静态成员变量,肯定会说这个函数没有声明的,因为没有对象,就不会给成员变量分配空间,所以这种访问是无效的。而函数就不同了。即使没有对象,只要是其内部不进行未分配访问,其函数是可以顺利执行的。

        典型的例子:

     effitive C++   p59
        PriorotyCustomer::operator=(const PriorityCustomer &rhs)
        {

        Customner::opertator=(rhs);
       ....
       }  

  • 相关阅读:
    linux tcp/ip 调优
    ulimit 管理系统资源
    linux grep 设置高亮显示
    linux 调整内核优化
    微信公众平台自定义菜单及高级接口PHP SDK
    微信公众平台开发(102) 模版消息
    微信WeixinJSBridge API
    微信支付开发(2) 静态链接Native支付
    微信分享JS接口失效说明及解决方案
    微信JS接口
  • 原文地址:https://www.cnblogs.com/albert1017/p/3823884.html
Copyright © 2011-2022 走看看