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

2022-01-18 00:00:00 initialization constructor constants c++

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

Why must class members declared as const be initialized in the constructor initializer list rather than in the constructor body?

两者有什么区别?

推荐答案

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

In C++, an object is considered fully initialised when execution enters the body of the constructor.

你说:

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

"i wanted to know why const must be intialized in constructor initializer list rather than in it's body ?."

您缺少的是 initialisation 发生在初始化列表中,而 assignment 发生在构造函数的主体中.逻辑步骤:

What you are missing is that initialisation happens in the initialisation list, and assignment happens in the body of the constructor. The steps in logic:

1) 一个 const 对象只能被初始化.

1) A const object can only be initialised.

2) 一个对象的所有成员都在初始化列表中初始化.即使您没有在此处显式初始化它们,编译器也会很乐意为您这样做:-)

2) An object has all of its members initialised in the initialisation list. Even if you do not explicitly initialise them there, the compiler will happily do so for you :-)

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

3) Therefore, putting 1) and 2) together, a member which is const can only ever have a value assigned to it at initialisation, which happens during the initialisation list.

相关文章