美文网首页
C++类成员变量的默认初始化(隐式初始化)过程

C++类成员变量的默认初始化(隐式初始化)过程

作者: 绿风烟 | 来源:发表于2020-03-29 14:18 被阅读0次

类成员变量的默认初始化

类成员的默认初始化过程比较复杂,依据类的不同初始化方式和作用范围,其行为也有不同。下面依据常用方式整理一下类成员变量的初始化过程。假设有一个类Object,拥有成员变量number,pointer,name,pname,refname等来考虑初始化过程。

class Object {
    private:
        int *ptr;
        int number;
        string name;
        string *pname;
        string &refname;

    public:
        Object() {}
};

当我们调用

int main() {
    Object obj;
}

类的成员变量将会被怎样进行初始化?

这里我们只考虑在栈(stack)上调用这种最常用的方式,因为这种情形默认初始化的程度是最小的,其它方式以这种行为考虑可以很大程度上涵盖。

针对不同类型的成员变量初始化方式的总结

类成员变量的默认初始化(隐式初始化)过程完全相同于函数中本地变量的初始化过程。

对于原生类型,int类型或者指针类型等,他们不会被初始化。但是,他们会使用类实例内存地址中任何已经存在的野值作为自己的值,也就是说,在这种情形下,这些类型的类成员变量的值可能包含不可预知的垃圾值。所以原生类型必须要明确的初始化。

针对对象类型,在这种情形下,默认构造器会被调用。

针对引用类型,变量不被初始化是非法的,会收到编译器的警告,编译无法通过。

针对上面的不同情形,Object类默认初始化过程总结如下

    int *ptr;  // 包含任意野值
    int number; // 包含任意野值
    string name; // 空string
    string *name; // 包含任意野值
    string &refname; //编译错误

更多情形请参考statckoverflow帖子

相关文章

  • C++类成员变量的默认初始化(隐式初始化)过程

    类成员变量的默认初始化 类成员的默认初始化过程比较复杂,依据类的不同初始化方式和作用范围,其行为也有不同。下面依据...

  • Java成员变量和局部变量

    1、成员变量可以显式初始化也可以不初始化(隐式),局部变量就必须得显式初始化,成员变量的修改必须在方法中进行。如 ...

  • Java继承中初始化顺序2

    /* 看程序写结果 提示:一个类的初始化过程 成员变量进行初始化 默认初始化 显示初始化 构造方法初始化 */ c...

  • c++ python java

    c++ 初始化 C++类中成员变量的初始化有两种方式 - yu132563的专栏 - CSDN博客 C++ 变量初...

  • [转]Effective C++学习笔记:初始化列表中成员列出的

    类成员的默认初始化顺序是按照声明顺序进行, 如果使用初始化列表初始化成员变量, 则必须按照成员变量的声明顺序进行;...

  • Java日常积累

    1. 类的成员变量默认初始化,局部变量默认不会初始化,未初始化使用编译不通过;未初始化和null有区别。

  • 成员初始化列表

    C++为类中提供类成员的初始化列表 类对象的构造顺序是这样的:1.分配内存,调用构造函数时,隐式/显示的初始化各数...

  • JAVA当中变量什么时候需要初始化

    1、对于类的成员变量,不管程序有没有显式的进行初始化,Java虚拟机都会先自动给它初始化为默认值 默认值如下:Bo...

  • java 类

    在类内部,对于成员变量,如果在定义的时候没有显式的给出初始化,则java类会保证每个成员变量都会被初始化: 构造器...

  • 第二章:保证稳定性和兼容性

    2.7 快速初始化成员变量 C++98:使用 ‘=’ 初始化类中成员变量,成员变量必须满足:① static ② ...

网友评论

      本文标题:C++类成员变量的默认初始化(隐式初始化)过程

      本文链接:https://www.haomeiwen.com/subject/oqtuuhtx.html