现代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_t
和char32_t
分别对应UTF16和UTF32这两种编码方式。
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