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了。

相关推荐
宇木灵2 小时前
C语言基础学习-二、运算符
c语言·开发语言·学习
想放学的刺客3 小时前
整理了120道单片机嵌入式面试题与答案,覆盖了硬件电路和C语言等核心领域。
c语言·c++·stm32·单片机·嵌入式硬件·mcu·51单片机
yangSimaticTech3 小时前
沿触发的4个问题
开发语言·制造
舟舟亢亢3 小时前
算法总结——二叉树【hot100】(上)
java·开发语言·算法
百锦再3 小时前
Java中的char、String、StringBuilder与StringBuffer 深度详解
java·开发语言·python·struts·kafka·tomcat·maven
weixin_477271694 小时前
根象:树根。基石。基于马王堆帛书《周易》原文及甲骨文还原周朝生活活动现象(《函谷门》原创)
算法·图搜索算法
普通网友4 小时前
多协议网络库设计
开发语言·c++·算法
努力努力再努力wz4 小时前
【Linux网络系列】:TCP 的秩序与策略:揭秘传输层如何从不可靠的网络中构建绝对可靠的通信信道
java·linux·开发语言·数据结构·c++·python·算法
汉克老师5 小时前
GESP2024年3月认证C++二级( 第二部分判断题(1-10))
c++·循环结构·分支结构·gesp二级·gesp2级
daxi1505 小时前
C语言从入门到进阶——第9讲:函数递归
c语言·开发语言·c++·算法·蓝桥杯