Chinaunix首页 | 论坛 | 博客
  • 博客访问: 275425
  • 博文数量: 28
  • 博客积分: 690
  • 博客等级: 上士
  • 技术积分: 358
  • 用 户 组: 普通用户
  • 注册时间: 2011-08-25 20:39
文章分类

全部博文(28)

文章存档

2012年(12)

2011年(16)

分类: C/C++

2012-03-08 10:26:23


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显示声明。
阅读(2879) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~