当前位置:  开发笔记 > 编程语言 > 正文

为什么必须在构造函数初始化器中而不是在其体内初始化const成员?

如何解决《为什么必须在构造函数初始化器中而不是在其体内初始化const成员?》经验,为你挑选了2个好方法。

为什么必须声明类成员const在构造函数初始化列表中而不是在构造函数体中初始化?

两者有什么区别?



1> 小智..:

在C++中,当执行进入构造函数体时,会认为对象已完全初始化.

你说:

"我想知道为什么const必须在构造函数初始化列表中而不是在它的正文中初始化?"

你缺少的是初始化发生在初始化列表中,并且赋值发生在构造函数的主体中.逻辑中的步骤:

1)const对象只能初始化.

2)一个对象的所有成员都在初始化列表中初始化.即使你没有在那里明确地初始化它们,编译器也会乐意为你做这些:-)

3)因此,将1)和2)放在一起,const的成员只能在初始化时分配给它的值,这在初始化列表期间发生.


恭喜你的第一个答案...... ^ _ ^

2> VonC..:

const 并且必须在声明它们的行上初始化引用变量.

 class Something  
 {  
     private:  
      const int m_nValue;  
     public:  
      Something()  
      {  
          m_nValue = 5;  
      }  
  };

会产生相当于的代码;

const int nValue; // error, const vars must be assigned values immediately  
nValue = 5; 

在构造函数体中分配const或引用成员变量值是不够的.

C++提供了另一种初始化成员变量的方法,允许在创建成员变量时而不是之后初始化成员变量.这是通过使用初始化列表完成的.

您可以通过两种方式为变量赋值:显式和隐式:查看plaincopy到clipboardprint?

int nValue = 5; // explicit assignment  
double dValue(4.7); // implicit assignment  

使用初始化列表与执行隐式赋值非常相似.

请记住,用于初始化基础和成员数据对象的成员初始化列表位于定义中,而不是构造函数的声明.

有关cpp-tutorial和Code Wrangler的更多信息.

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有