当前位置:   article > 正文

C++构造函数初始化列表——笔记_c++ 构造函数什么时候初始化

c++ 构造函数什么时候初始化

构造函数分两个阶段执行:(1)初始化阶段; (2)普通的计算阶段。

计算阶段由构造函数函数体内的所有语句组成。初始化发生在计算阶段之前。

 

不管成员是否在构造函数初始化列表内显式初始化,类类型的成员总是在初始化阶段初始化。所以在初始化列表中对成员初始化,比在计算阶段对成员进行赋值要来得效率,因为即使没有显式的提供初始化列表,编译器也会隐式的对类类型成员进行初始化。

在构造函数列表中没有显式提及的每个成员,使用与初始化变量相同的规则进行初始化。

 

没有默认构造函数的类类型成员,以及const或引用类型的成员,不管是哪种类型,都必须在构造函数初始化列表中初始化。因为不管成员是否在构造函数初始化列表内显式初始化,类类型的成员总是在初始化阶段初始化。如果此时编译器找不到该类的默认构造函数就会报错。可以初始化const或引用对象,但是不能对他们进行赋值,所以初始化const或引用对象的唯一机会就是在构造函数的初始化列表,在执行构造函数体时,才对他们赋值时错误的。

 

类成员的初始化顺序与类定义中定义成员的顺序相同,与初始化列表中成员出现的先后次序无关。

 

将构造函数声明为explicit,可以防止编译器调用构造函数进行隐式的类型转换,但explicit只能在类定义体中声明,同样声明友元函数时的关键字friend也之能出现在类定义体中。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/209045
推荐阅读
相关标签
  

闽ICP备14008679号