C++ initializer_list&&类型推导

发布于:2024-07-01 ⋅ 阅读:(147) ⋅ 点赞:(0)

目录

initializer_list

C++自动类型推断

auto

typeid

decltype


initializer_list<T>

C++支持统一初始化{ },出现了一个新的类型initializer_list<T>,一切类型都可以用列表初始化。提供了一种更加灵活、安全和明确的方式来初始化对象。

class Date
{
public:
	Date(int year,int month,int days):_year(year),_month(month),_days(days)
	{}
private:
	int _year;
	int _month;
	int _days;
};
int main()
{
	//{}列表初始化(统一初始化)
	int a { 10};
	int b = { 10 };
	char c={'x'};
	int arr[3] = { 1,2,3 };
	string s{"hello world"};
	Date d1(2022,1,2);//C++98的初始化方式
	Date d2{ 2019,2,3 };//C++11的列表初始化
	Date d3 ={ 2023,7,1 };//{2023,7,1}隐式类型转换->临时对象->d3拷贝构造
	vector<int> v = { 1,2,3,4,5,6 };C++11的列表初始化,vector具有形参类型是initializer_list的构造函数
	list<int> li = { 1,2,3 };
	return 0;
}

initializer_list结构

创建一个initializer_list,并遍历:

initializer_list<int> il = { 1,2,3 };
initializer_list<int>::iterator it = il.begin();
while (it != il.end())
{
	cout << *it << endl;
	++it;
}

可以将initializer_list作为容器构造函数的形参类型来初始化容器,例如:

C++自动类型推断

auto

通过auto关键字可以使程序员在写一些长度较长的类型名时免去拼写,使用auto来代替,auto会自动推导出等号右边的类型。

vector<int> v;
auto it = v.begin();//auto自动推导迭代器类型
//本来需要这样写vector<int>::iterator it=v.begin();

typeid

cout << typeid(v).name() << endl;//打印出类型的字符串

decltype

使用推导出来的类型定义新的变量