C++构造函数中参数初始化表与函数体赋值的区别
参考链接:C语言中文网 http://c.biancheng.net/cpp/biancheng/view/2979.html
一、 使用参数初始化表并没有效率上的优势,仅仅是书写方便。
二、初始化 const 成员变量
参数初始化表还有一个很重要的作用,那就是初始化 const 成员变量。初始化 const 成员变量的唯一方法就是使用参数初始化表。例如 VS/VC 不支持变长数组(数组长度不能是变量),我们自己定义了一个 VLA 类,用于模拟变长数组,请看下面的代码:
class VLA{ private: const int m_len; int *m_arr; public: VLA(int len); }; //必须使用参数初始化表来初始化 m_len VLA::VLA(int len): m_len(len){ m_arr = new int[len]; }
VLA 类包含了两个成员变量,m_len 和 m_arr 指针,需要注意的是 m_len 加了 const 修饰,只能使用参数初始化表的方式赋值,如果写作下面的形式是错误的:
class VLA{ private: const int m_len; int *m_arr; public: VLA(int len); }; VLA::VLA(int len){ m_len = len; m_arr = new int[len]; }

浙公网安备 33010602011771号