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

2021-12-30 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 ?."

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

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.

相关文章