1.关于C++中全局对象的初始化
C++中的全局对象,初始化即不是在编译时完成的,也不算是运行时完成。由于全局对象实现于任何“函数活动范围”之外,显然没有地方来安置这样一个构造函数调用操作。在C++中,实现了一种机制,即在程序执行main函数之前,会首先运行一个叫做startup()的函数,startup函数是更早于程序进入点(main)执行起来的码,由C++ 编译器提供,被联结到你的程序中。startup 码可能做些像函数库初始化、进程信息设立、I/O stream 产生等等动作,以及对static 对象的初始化动作。当编译器编译你的程序,发现一个静态对象,它会把这个对象加到一个串行之中。更精确地说则是,编译器不只是加上此静态对象,它还加上一个指针,指向对象的构造函数及其参数(如果有的话)。把控制权交给程序进入点(main)之前,startup 码会快速在该串行上移动,调用所有登记有案的构造函数并使用登记在案的参数,于是就初始化了你的全局/静态对象。
全局对象之间如果有相互引用关系,这时对象的初始化顺序很重要。为了保证全局对象的初始化顺序正确,可以把所有全局对象定义在同一个文件中,例如在主函数前面。对于全局变量也是如此。
2.迭代器初始化的问题
迭代器在定义时可以不用初始化,但是如果要初始化的话,不能初始化为NULL,即使迭代器是一个指针。初始化的时候可以初始化为某个容器类的开始或结束位置。比如存在容器类:
vector A;
vector::iterator it = A.begin();
或者:
vector::iterator it = A.end();
3.对象的定义和初始化
设存在类 class A;
如果要定义一个对象,有如下方式。
A a;
A a(parameters);
A();类名后面直接加空括号的方式定义一个无名临时对象,可以用在初始化容器类成员时。
A a();注意这种方式是声明了一个函数,不是对象
4.const类成员函数和const变量
在const类成员函数中,只能调用const类型函数。默认的全局变量是extern类型的,但是const类型的全局变量默认不是extern类型的,需要用extern显示声明。
阅读(2953) | 评论(0) | 转发(0) |