目录
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
使用推导出来的类型定义新的变量