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

  • 相关阅读:
    leetcode_697. 数组的度
    645. 错误的集合
    leetcode_448. 找到所有数组中消失的数字
    leetcode_628. 三个数的最大乘积
    leetcode_414. 第三大的数
    leetcode_495. 提莫攻击
    leetcode_485. 最大连续1的个数
    在 Mac、Linux、Windows 下Go交叉编译
    Goland基本操作
    etcd搭建及基本使用
  • 原文地址:https://www.cnblogs.com/albert1017/p/3823884.html
Copyright © 2011-2022 走看看