C++11新特性学习笔记(一)

最近在看侯捷的C++标准库(第二版),书中一开始就讲解了C++11的一些新特性,在此权当笔记备忘。

一、一致性初始化与初始列

在C++11之前,变量初始化可因为小括号、大括号或者赋值操作符的出现而发生。C++11引入了“一致性初始化”(uniform initialization)概念,意思是面对任何初始化动作都可以是使用相同的语法操作实现——使用大括号,示例如下:

<span style="font-size:18px;">int values[]{1, 2, 4, 9};
vector<double> vec{ 1.9, 3.2, 9.01, 10.8 };
complex<double> c{ 4.0, 3.0 };	//等价于 c(4.0,3.0)</span>
初始列会强迫造成所谓的值初始化,意思就是即使某个局部变量属于某种基础类型(通常会有不确定值)也会被初始化为0(指针会初始化为nullptr):

int i; //未初始化

int j{}; //初始化为0

int* p; //未初始化,野指针

int* q{}; //q被初始化为nullptr

注意:一致性初始化,即大括号的初始化方式不支持窄化,也就是说大括号初始化不支持精度降低或造成数值变动!

int x1(5.3);//x1 = 5

int x2{5.3}; //ERROR:narrowing

char c1{17}; //OK

char c2{9999}; //ERROR:narrowing ,char的范围是-128~127


二、带编码的字符串

C++11中可以使用编码前缀来指定字符串为一个特定字符编码。下面这些编码前缀是定义好的:

* u8 定义一个UTF-8编码

* u 定义一个类型为char16_t的字符串

* U 定义一个类型为char32_t的字符串

* L 定义一个宽字符串,类型为wchar_t

例如:

auto str = L“hello”;//str为宽字符串

auto rawStr = uR"qq(sdfaf\dfas0ds\\\d)qq";//rawStr为char16_t类型的原始字符串



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值