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];
}

 

posted @ 2021-03-30 19:05  zeroPatrick  阅读(271)  评论(0)    收藏  举报