这两个概念如此相似,以至于很多时候都在混用。
初始化列表是构造函数的周边概念,表示在执行构造函数中,先执行初始化列表,再执行函数体内的语句。
构造函数的编写尽量采用初始化列表的方式,特别是类中有自定义类出现的时候。而且有些情况,必须采用初始化列表才能初始化成员变量,如类中有引用类型,类中有const成员变量时等。
class myclass
{
public:
myclass(int a, int b, int c):m_a(a),m_b(b),m_c(c)
{
std::cout << "construct function called!" << std::endl;
}
private:
int m_a;
const int m_b;
int &m_c;
};
列表初始化是c++11为了统一内置变量,结构,类型的初始化方式的一种尝试,即使用者可以采用花括号{}来初始化这些变量。
为什么所有类型都可以采用列表来初始化变量?那是因为c++11引入了initializer_list这个类模板。如何使用这个类模板?这里提供一个案例。
#include <iostream>
#include <initializer_list>
class myclass
{
public:
myclass(int a,int b)
{
std::cout << a << "---" << b << std::endl;
}
myclass(std::initializer_list<int> il)
{
for(auto &i : il){
std::cout << i << std::endl;
}
}
};
int main()
{
myclass aa(1,2);
myclass bb{3,4,5};
return 0;
}
即可以作为函数参数,这里作为构造函数的参数,也可以用作类成员函数,或普通函数的参数。那么声明对象的时候必须采用花括号初始化对象,而这样的好处是可以不用指定参数个数,当然它的主要用途是用来支持泛型编程。

1288

被折叠的 条评论
为什么被折叠?



