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);
       ....
       }  

  • 相关阅读:
    使用Docker搭建Wordpress
    Django开发Web页面html增加判断展示
    Python如何取小数点位数
    html内容可编写
    MySQL 设置 非空约束依然能插进去的办法
    Git拉取远程所有分支
    my.ini 配置文件
    node
    TP upload 上传根目录不存在
    linux 安装 memcache
  • 原文地址:https://www.cnblogs.com/albert1017/p/3823884.html
Copyright © 2011-2022 走看看