const需要在类外初始化吗_C++11常用特性:03 初始化(类成员/初始化列表/防止类型收窄)...

类内成员初始化

定义成员变量时,可以像static const变量一样就地初始化,但static变量则不可以,还要像C++98一样在类外初始化。

61a1d2a53b5c6fed0bc03e2adb4829e9.png

在C++17的标准中,通过使用inline关键字,可以对static成员变量地初始化

3305580a98abc27299c998671c0bcd6e.png

所有引入foo的cpp文件中看到的都是相同的对象,就如同在一个cpp文件中定义,在其它cpp文件中extern这个变量,编译器确保该变量所在的可见范围内全局唯一。

初始化列表

为了统一初始化方式,并且让初始化行为具有确定的效果,C++11提出了初始化列表

8cf3d09d170864b254823b54814997ac.png

STL中的容器是通过使用std::initializer_list这个轻量级的类模板来完成上述功能支持的。只需要为自定义类添加一个std::initializer_list构造函数,该类就可以拥有这种任意长度的初始化能力。

442d8456a2d6b690c1a7dd38ec64cdfb.png

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、长整型转为短整型

10cefde387aea833ff77c5953f8a95ae.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值