类的初始化列表与const成员

初始化列表

  • 成员初始化顺序与在列表中的顺序无关
  • 成员的初始化顺序与在类中的声明顺序相同
  • 初始化列表在构造函数执行前执行

类中的const成员

  • 类中的const成员只能且必须在初始化列表初始化
  • 类中的const成员本质是只读变量,有内存空间。不是常量,不会进符号表
#include 

class Value
{
private:
    const int value;
public:
    Value(int i):value(i)
    {
        printf("i = %d, value= %d\n", i, value);
    }
    int get()
    {
        return value;
    }
    int set(int v)
    {
        int& ref = const_cast(value);
        ref = v;
    }
};

class Test
{
private:
    Value v1;
    Value v2;
    Value v3;
public:
    Test() : v2(2), v1(1), v3(3)
    {
      printf("Test::Test()\n");
      v1.set(-1);
      v2.set(-2);
      v3.set(-3);
      printf("v1 = %d, v2 = %d, v3= %d\n",v1, v2, v3);
    }
};

int main()
{
    Test t;
    
    return 0;
}

G++编译器结果:

i = 1, value= 1
i = 2, value= 2
i = 3, value= 3
Test::Test()
v1 = -1, v2 = -2, v3= -3

 

转载于:https://my.oschina.net/u/3472252/blog/2874782

你可能感兴趣的:(类的初始化列表与const成员)