C++中特殊变量的初始化方法

1.特殊变量函数

  • 引用(&)      :引用和常引用    
  • 常量(const)
  • 静态(static) :普通静态和静态常量((整数类型(integral types:int、char、bool、)和非整数类型)

2.初始化方法code

  • 常量(const)和引用(&)必须听过参数列表进行初始化;
  • 静态成员变量的初始化有些特别,是在类外初始化且不能在带有 static 关键字;
  • 带有类内初始值设定项的成员必须为常量且为integral types;

因此,纵向来看,初始化方式主要有两种:对象

  • 初始化参数列表:const,引用
  • 类外初始化:static(且再也不带有 static 关键字)
  • 类内初始值设定:const+integral type

横向来看,不一样数据类型的初始化方式分别为:生命周期

  • 引用:初始化参数列表
  • const 
    • 类内初始化值设定(若是为integral types)
    • 初始化参数列表
  • static: 
    • 类外初始化,且再也不带有 static 关键字
    • 类内初始化设置,必须为const,且integral
    • 不可经过构造函数的初始化参数列表进行初始化 
      • static 不属于特定对象,而是属于类,显然不能经过构造函数的初始化参数列表进行 static 变量的初始化
class Test
{
public:
    Test():i(1), ri(i), ci(2), cd(0)
    {}
                // 对于通常常量型(非integral type)和引用型成员变量,必须经过初始化参数列表进行初始化
                // 普通成员变量也能够放在函数体中,但本质已不是初始化,而是一种普通的赋值运算,效率极低
private:
    int i;
                // 普通成员变量
                // 初始化参数列表,函数体
    int& ri;
                // 引用,初始化参数列表
    const int ci;
                // 常量
                // 类内初始值设定
                // 初始化参数列表
    const int& cri;
                // 常引用,初始化参数列表
    const double cd;
                // 常量非integral types
                // 初始化参数列表
    static int si;
                // 静态很是量
                // 类外,C++11以后的版本也能够在类内部进行初始化
    static const int sci;
                // 静态常量(integral type)
                // 类外或者类内直接初始化
    //static const int sci=100;
    static const double scd;
                // 静态常量(非integral )
                // 类外
};

 

  • 通常常量类型(未被static修饰)、引用类型,在类内部便可实现初始化,在类外实现初始化的一定是static类型(固然一部分的静态成员,也即同时又是const和integral type的,可在类内初始值设定,这一语法特性并不是为全部的编译器所支持,因此一种推荐的作法,便是凡是static类型的,咱们总在类外进行初始化,哪怕它在类内已进行初始值设定,只要在类外初始化时不修改其值):
注意:静态变量的初始化并无static关键字
int Test::si = 0;
const int Test::sci = 1;
const double Test::scd = 99.0;
  • 静态成员属于类做用域,但不属于类对象实例,和普通的static变量同样,程序一运行就分配内存并初始化,生命周期和程序一致;
  • 静态成员其实和全局变量的地位是一致的,只不过编译器把它的使用限制在类做用域内。
  • 常量引用只能调用常量相应对象上的常量方法,不能调用很是量方法。

相关文章
相关标签/搜索