现代C++(0)新基础类型

现代C++(0):新基础类型

之所以把新基础类型排在最前面,是因为基础数据类型作为C++基础组成部分。

1.新类型long long

long long是C++11新推出的数据类型,它是64位有符号整型

需要强调的一点是实际上所有整型都会出现的问题:整型溢出

因为编译器在处理没有任何限定的整型字面量的时候,会默认把他编译成32位的整型。

如果此时这个字面量进行了加减乘除等运算,结果有可能超出32位,此时就会造成溢出

那么如何规定编译器去计算一个64位整型(long long)呢?

  • 引入新的字面量后缀:LL 或 ll ——long long
long long x = 65536LL;
//或
long long x = 65536ll;

如果想告诉编译器这个是无符号整型,需要加后缀:ULL ——unsigned long long

1.1.判断最大、最小值

在最新标准的STL中,std::numeric_limits<long long>定义了long long类型的最大值最小值

举例:

std::cout<<std::numeric_limits<long long>::max();
std::cout<<std::numeric_limits<long long>::min();
std::cout<<std::numeric_limits<unsigned long long>::max();

2. 新字符集char16_t和char32_t

char16_tchar32_t分别对应UTF16UTF32这两种编码方式

2.1字符集和编码方式

字符集:如Unicode,是一个相对稳定的字符的集合。每一个字符在字符集里面都有固定对应的数值。

编码方式:如UTF8,UTF16。UTF(Unicode Transformation Format)Unicode转换格式,就是把字符对应的数值通过某种规则重新排列组合,实际转换为Unicode的时候都是同一数值

UTF8是单字节编码,占1个字节。UTF16是双字节编码,占2个字节,UTF32同理。

2.2char16_t和char32_t
  • 使用char16_t或char32_t需要使用特定的前缀

举例:

char16_t utf16 = u'好';
char32_t utf32 = U'好';

char16_t utf16[] = u"你好世界";
char32_t utf32[] = U"你好世界";
  • char16_t的前缀是小写u,char32_t的前缀是大写U

拓展:wchar_t,这个数据类型并不常见,但是在Windows系统里用的较多。尽量不要使用这个数据类型,因为它对于跨平台的支持不友好,在标准里没有固定字符的长度。

2.3char8_t

这个数据类型是C++20新推出的类型,前缀是u8。

在C++20中,使用UTF8编码方式必须用char8_t声明;

举例:

char str[] = u8"test";	//C++17编译成功;C++20编译失败,需要使用char8_t
char c = u8'c';
char8_t c8a[] = "test";	//C++20编译失败,需要使用char
char8_t c8 = 'c';

本人才疏学浅,如有错误请指正,感激不尽!

以上都是群内巨佬——三色牌告诉我的,有问题可以在群里找他,我是菜鸡

群号:762514085

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值