网站首页 > 基础教程 正文
类内成员初始化
定义成员变量时,可以像static const变量一样就地初始化,但static变量则不可以,还要像C++98一样在类外初始化。
在C++17的标准中,通过使用inline关键字,可以对static成员变量地初始化
所有引入foo的cpp文件中看到的都是相同的对象,就如同在一个cpp文件中定义,在其它cpp文件中extern这个变量,编译器确保该变量所在的可见范围内全局唯一。
初始化列表
为了统一初始化方式,并且让初始化行为具有确定的效果,C++11提出了初始化列表
STL中的容器是通过使用std::initializer_list这个轻量级的类模板来完成上述功能支持的。只需要为自定义类添加一个std::initializer_list构造函数,该类就可以拥有这种任意长度的初始化能力。
std::initializer_list也可以用在一般函数,用来传递同类型的数据集合。
std::initializer_list说明:
1)轻量级模板容器,可以通过iterator操作,但只有3个接口函数:size、begin和end
2)可以接收任意长度的初始化列表,但必须是同类型元素
3)只能被整体初始化或赋值
防止类型收窄
类型收窄指的是导致数据内容发生变化或者精度丢失的隐式类型转换。使用列表初始化可以防止类型收窄。
如下是常见的类型收窄情况,编译器可能不会有告警或错误,但经过隐式转换后,值变了
1、浮点数隐式转为整数。 int i = 0.3;
2、高精度浮点数隐式转为低精度浮点数。long double -> double -> float
3、整型转浮点型,整型值大于浮点型
4、长整型转为短整型
猜你喜欢
- 2024-10-10 C++系列1-1:初探C++ c=2μf
- 2024-10-10 浅谈C++11(第9篇 可变参数模板) c++可变参数模板类
- 2024-10-10 数组的初始化方式有哪几种? 数组的初始化是什么意思
- 2024-10-10 c++对于内建类型的默认初始化 创建内部类的对象
- 2024-10-10 C++类构造函数,如何初始化对象?linux C++第27讲
- 2024-10-10 【C++编程语言】之 类和对象——对象的初始和消除
- 2024-10-10 C++基础语法梳理:引用、封装、继承和多态
- 2024-10-10 C++核心准则?:按照成员声明的顺序定义和初始化成员变量
- 2024-10-10 C++核心准则C.47:按照成员变量声明的次序定义和初始化数据成员
- 2024-10-10 C/C++语言编程系列002——不同情况下数组的初始化方法
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)