为什么const成员必须在构造函数初始化器中初始化,而不是在其本体中初始化?
为什么声明为const
类成员必须在构造函数初始化列表中而不是在构造函数体中初始化?
两者有什么区别?
在C ++中,当执行进入构造函数的主体时,对象被认为是完全初始化的。
你说:
“我想知道为什么const必须在构造函数初始化列表中初始化,而不是在它的正文中。”
你所缺less的是初始化发生在初始化列表中,并且赋值在构造函数的主体中发生。 逻辑中的步骤:
1)一个const对象只能被初始化。
2)对象的所有成员都在初始化列表中初始化。 即使你没有明确地初始化它们,编译器也会乐意为你做:-)
3)因此,把1)和2)放在一起,一个const的成员在初始化过程中只能赋值给它,这在初始化列表中发生。
const
和引用variables必须在声明的行上初始化。
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或引用成员variables值是不够的。
C ++提供了另一种初始化成员variables的方法,允许在创build成员variables时进行初始化,而不是在之后进行。 这是通过使用初始化列表完成的。
您可以通过两种方式将值分配给variables:显式隐式地赋值给variables:view plaincopy to clipboardprint?
int nValue = 5; // explicit assignment double dValue(4.7); // implicit assignment
使用初始化列表与隐式赋值非常相似。
请记住,用于初始化基本和成员数据对象的成员初始化列表位于定义中,而不是构造函数的声明。
更多关于cpp-tutorial和Code Wrangler的信息 。
因为常量variables和引用必须在声明时即在使用之前初始化。 但是构造函数将赋值给一个variables而不是初始化这个variables,所以你必须使用initailizier列表来获取常量和引用