当前位置导航:炫浪网>>网络学院>>编程开发>>C++教程>>C++进阶与实例

thinking in c++ 之static小结


    static最基本的含义是:“位置不变的某个东西“,这里指的是内存中的位置或者文件中的可见性
    1,在c和c++中,static的两种含义:
    (1),静态存储。
    (2),对一个特定的编译单元来说是本地的,这个名字在这个单元或类之外不可见。

    2,static对象将存储在程序的静态存储区中,而不是在堆栈中。这个对象只在汉书第一次调用是初始化,其后不用再初始化。

    3,对于静态对象的初始化,零赋值只对预定义对象有效,用户自定义的类型必须用构造函数初始化。

    4,静态对象的析构函数在程序的main()函数退出时,或者标准c函数exit()调用时才被调用。在析构函数中调用exit()是很危险的,因为这样可能引起死循环。

    5,静态对象的销毁是按它们初始化的相反顺序进行的。全局对象总是在main()执行之前被创建。如果一个包含静态对象的函数从没有被调用过,那么这个对象的构造函数就没有被执行,所以也就不会调用析构函数

    6,一个被明确声明为static的对象或函数的名字对编译单元来说是局部变量,这些名字有内部连接。类声明和局部变量没有联接。

    7,extern表示该名字对所有的编译单元是可见的,用static和extern限定的对象总是驻留在静态数据区

    8,普通函数是外部连接的

    9,类的静态成员拥有一块单独的存储区,而不管我们创建了多少个该类的对象,这就为这些了创建了一个通信的方法。

    10,静态成员的定义必须出现在外部,而且只能有一次

    11,一个类的静态常量可以被用作一个编译时常量

    12,在局部类(在函数内部定义的类)中不能有静态数据成员。

    13,静态成元函数:
    (1),静态成元函数为该类的全体服务,而不是为类的部分对象服务;
    (2),静态成员函数不能访问一般的数据成员,只能访问静态数据成员,并且只能调用静态成元函数。

    14,为什么静态成元函数不能访问一般的数据成员,也不能调用普通的成员函数?
    由于当前对象的地址是被隐藏的传递给被调用的函数的,由于静态成员函数不是某个对象独有的,所以没有this指针,所以无法调用调用普通成员函数,同样对普通成员变量的访问也用到了this指针。

 

相关内容
赞助商链接