55
A
回答
90
在C++中,当执行进入构造函数的主体时,对象被认为是完全初始化的。
你说:
“我想知道为什么常量必须 在构造函数初始化intialized 列表,而不是在它的身上?”。
你缺少什么是初始化发生在初始化列表,分配发生在构造函数体。逻辑步骤:
1)const对象只能被初始化。
2)对象的所有成员都在初始化列表中初始化。即使你没有在那里明确地初始化它们,编译器也会很乐意为你做这件事:-)
3)因此,把1)和2)放在一起,一个const成员只能赋值给它在初始化时发生,这在初始化列表中发生。
9
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++提供了另一种初始化成员变量的方法,它允许在创建成员变量时进行初始化,而不是在之后进行。这是通过使用初始化列表完成的。
您可以通过两种方式为变量赋值:显式隐含: view plaincopy to clipboardprint?
int nValue = 5; // explicit assignment
double dValue(4.7); // implicit assignment
使用初始化列表与进行隐式赋值非常相似。
请记住,用于初始化基本和成员数据对象的成员初始化列表位于定义中,而不是构造函数的声明。
-2
由于常量变量和引用必须在声明时(即在使用之前)初始化。 但构造函数将值分配给一个varaible不initailize变量,因此您必须使用initailizier列表常数和引用
相关问题
- 1. 在构造函数范围初始化而不是成员初始化列表
- 2. 必须在构造函数库/成员中初始化?
- 3. 带错误的引用变量,必须在构造函数库/成员初始化程序中初始化
- 4. 初始化在定义与初始化在构造函数中
- 5. auto_ptr构造函数体中的成员初始化(不在初始化程序列表中)
- 6. 什么时候在构造函数初始化列表中初始化时构造成员对象?
- 7. 初始化的声明VS在构造函数初始化
- 8. Java - 私有初始化程序或在构造函数中的初始化?
- 9. 在函数中初始化,并没有在主要初始化
- 10. 在构造函数中初始化
- 11. 在构造函数中初始化ArrayList
- 12. servicehost构造函数不初始化其成员在linux(mono - vb.net)
- 13. 静态成员必须初始化?
- 14. 在初始化其他成员时跳过结构成员的初始化
- 15. 初始化块vs构造函数vs变量初始化
- 16. 构造函数初始化vs获取集合初始化
- 17. 带空初始化的构造函数初始化列表
- 18. 为什么静态成员必须在main()之外初始化?
- 19. 在构造函数初始化程序中使用成员的成员函数
- 20. 在C++ 98中,'dvd1'必须由构造函数初始化,而不是'{...}'
- 21. 在初始化列表中初始化引用对象成员
- 22. 结构成员初始化
- 23. 结构成员初始化
- 24. 为什么不是我的类构造函数初始化其成员变量?
- 25. 在C++中的类构造函数中初始化列表初始化
- 26. 对象引用必须在构造函数库/成员初始值设定项列表中初始化
- 27. 不能在成员初始化列表初始化对象
- 28. 线程化类成员函数;线程初始化通过初始化列表
- 29. C++中初始化构造
- 30. 初始化在构造
恭喜你的第一个答案......^_^ – paercebal 2008-12-10 09:29:21