C++11(初始化)

文章目录

C++11初始化

{}初始化

C++98中{}可以对数组或结构体进行初始化

C++11想要统一初始化方式,试图实现用{}初始化一切对象

{}初始化也称为列表初始化,支持内置类型和自定义类型,自定义类型本质上是类型转换,产生临时对象,优化后变为直接构造

列表初始化可以省去=,而且禁止窄化转换,比如double转为int,保证精度

initializer_list

上面的列表初始化是面向单个对象的,初始化容器时需要对元素逐个调用构造函数

由此推出了initializer_list,容器支持含initializer_list的构造函数,就可以直接对任意个值组成的{}进行初始化,

本质是开一个数组,将数据拷贝过来,initializer_list用两个指针指向数组头尾

cpp 复制代码
int a{10};//内置类型 省略= 初始化
double b{3.14};
// int c{3.99};//禁止窄化转换,直接报错

int arr[]{1,2,3};//数组初始化

struct Stu
{
    int id;
};
Stu s{1001};//结构体初始化

class MyClass
{
public:
    MyClass(int x){}
};
MyClass obj{666};//自定义类 列表初始化

map<int,string> my_map{{1,"张三"},{2,"李四"}};//pair对象的{}初始化和map的带参构造结合在一起 
相关推荐
16 分钟前
数据结构第一课:复杂度解析
数据结构
梦想的旅途228 分钟前
Python实现企业微信文本消息发送
开发语言·python·企业微信
大鹏说大话1 小时前
美业微信会员系统哪个好
开发语言
古法安卓1 小时前
Android-epoll原理详解
android·java·android studio
大熊背1 小时前
树莓派IspPipeline LSC模块原理详解
算法·lsc·isppipeline·mesh lsc
fireworks991 小时前
接口鉴权(401与403)
java·后端
wear工程师1 小时前
线程池里的异常去哪了?execute 和 submit 不是一回事
java
孔明click331 小时前
别人绕过我的网关直接调用资源服务怎么办?使用 Sa-Token 解决:网关转发鉴权、RPC调用鉴权
java·sa-token·springboot·权限·权限认证
吴声子夜歌1 小时前
Java面试——设计模式(一)
java·设计模式·面试
半亩码田2 小时前
C#转Python第3.6篇:Python 的 @property 比 C# 的 get/set 更灵活
java·python·c#