C++11

C++11一切皆可列表初始化

变量列表初始化

自定义类型列表初始化

cpp 复制代码
struct Point
{
	int _x;
	int _y;
};
int main()
{

	Point p{ 1, 2 };

	return 0;
}

数组列表初始化

日期类列表初始化

cpp 复制代码
class Date
{
public:
	Date(int year, int month, int day)
		:_year(year)
		, _month(month)
		, _day(day)
	{
		cout << "Date(int year, int month, int day)" << endl;
	}
private:
	int _year;
	int _month;
	int _day;
};
	int main() {


		Date d1{ 2003,11,28 };
     	Date d1={ 2003,11,28 };//列表初始化可以省略赋值符号

	}

new多个对象列表初始化

new 多个日期类对象

c++11之前只能对这样new多个日期类:

11之后可以这样new多个日期:

vector,list,Date 列表初始化区别

Date只能初始化三个参数,因为Date构造函数只有三个参数:年,月,日:

多一个参数会报错,少一个参数也会报错:

但是vector,list初始化列表 参数不固定,根据需要自己决定参数个数。

难道vector写了很多个构造函数,每个构造函数都有不同的参数个数吗?

在vector的构造函数,c++11有一个构造函数叫:initializer_list

initializer_list的用法如下:

auto会自动转化为initializer_list。

原理: initializer_list不存储数据,只是用两个指针指向数据开头和结尾

initializer_list可以像容器一样去遍历:

同时, initializer_list还支持范围for:

用我之前自己模拟实现的vector来写区间调用:

vector · 孙鹏宇/孙鹏宇的第一个仓库 - 码云 - 开源中国 (gitee.com):

明显不可以调用。

我们写一个initializer_list构造函数就可以用了:

赋值也可以调用initializer_list构造,不过是深拷贝:

map也可以用 initializer_list

decltype

typeid()可以推导类型,但是它只是把类型以字符串的形式打印出来给你看一下,只能看不能用:

t的值肯定是double,但是假设我们不知道是什么类型,现在想在vector里用t的类型,auto用不了,因为auto不能作为参数类型。

typeid()也不行,因为它只能看,不能拿来用。

这个时候就只能用decltype了。

相关推荐
艾莉丝努力练剑22 分钟前
【C++STL :stack && queue (一) 】STL:stack与queue全解析|深入使用(附高频算法题详解)
linux·开发语言·数据结构·c++·算法
胡萝卜3.037 分钟前
深入理解string底层:手写高效字符串类
开发语言·c++·学习·学习笔记·string类·string模拟实现
kyle~37 分钟前
计算机系统---CPU的进程与线程处理
linux·服务器·c语言·c++·操作系统·计算机系统
CoovallyAIHub38 分钟前
ICLR 2026 惊现 SAM 3,匿名提交,实现“概念分割”,CV领域再迎颠覆性突破?
深度学习·算法·计算机视觉
IT古董1 小时前
【第五章:计算机视觉-计算机视觉在工业制造领域中的应用】1.工业缺陷分割-(2)BiseNet系列算法详解
算法·计算机视觉·制造
电鱼智能的电小鱼1 小时前
服装制造企业痛点解决方案:EFISH-SBC-RK3588 预测性维护方案
网络·人工智能·嵌入式硬件·算法·制造
西柚小萌新1 小时前
【Python从入门到精通】--Pycharm增加内存
开发语言·python·pycharm
不爱编程的小九九1 小时前
小九源码-springboot082-java旅游攻略平台
java·开发语言·旅游
只是懒得想了1 小时前
用C++实现一个高效可扩展的行为树(Behavior Tree)框架
java·开发语言·c++·design-patterns
bkspiderx1 小时前
C++设计模式之行为型模式:模板方法模式(Template Method)
c++·设计模式·模板方法模式