为什么 const 成员必须在构造函数初始化器中而不是在其主体中初始化? [英] Why must const members be initialized in the constructor initializer rather than in its body?

查看:21
本文介绍了为什么 const 成员必须在构造函数初始化器中而不是在其主体中初始化?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

为什么声明为 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.

这篇关于为什么 const 成员必须在构造函数初始化器中而不是在其主体中初始化?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆