一、初始化列表
C++ 提供了 初始化列表(initializer list) 语法,可以在 构造函数 中用来初始化类的成员变量。它的主要优势是 提高效率,特别是在初始化 const
或 reference
类型的成员时,以及避免额外的赋值操作。
1.1 语法
构造函数():属性1(值1),属性2(值2)..{}
1.2 示例代码
传统初始化操作
#include<iostream>
class Person{
public:
int m_A;
int m_B;
int m_C;
// 传统初始化操作
Person(int a, int b, int c){
m_A = a;
m_B = b;
m_C = c;
}
};
int main(){
Person p1(10,20,30); // 括号法调用构造函数 【直接初始化(Direct Initialization)直接调用构造函数。】
// Person p2 = Person(20,31,40); // 显式法调用构造函数 【拷贝初始化(Copy Initialization)先用 Person(20,31,40) 创建一个临时对象,再拷贝到 p2。(但 C++17 可能会优化成直接初始化)。】
// Person p3 = {20,31,40}; // 采用 C++11 列表初始化规则
std::cout<<"m_A="<<p1.m_A<<std::endl;
std::cout<<"m_B="<<p1.m_B<<std::endl;
std::cout<<"m_C="<<p1.m_C<<std::endl;
return 0;
}
利用初始化列表初始化属性
#include<iostream>
class Person{
public:
int m_A;
int m_B;
int m_C;
// 传统初始化操作
Person(int a, int b, int c):m_A(a),m_B(c),m_C(c){
}
};
int main(){
Person p1(10,20,30);
std::cout<<"m_A="<<p1.m_A<<std::endl;
std::cout<<"m_B="<<p1.m_B<<std::endl;
std::cout<<"m_C="<<p1.m_C<<std::endl;
return 0;
}