C++11~C++20 新基础类型

整数类型 long long(C++11)

C++11 增加了 long long 和 unsigned long long 两种整数类型。

long long int 类型和 long long 等价, unsigned long long int 类型和 unsigned long long 等价。

可以用后缀 LLULL 来表示这两种类型的变量:

long long x = 65536LL;		
long long y = 65536ULL;

C++ 标准中使用了宏 LLONG_MAXLLONG_MINULLONG_MAX等表示新整数类型的最大值和最小值(unsigned long long int 的最小值毫无疑问是 0)。

来看一个例子:

#include <iostream>
#include <climits>

int main(int argc, char *argv[]) {
    std::cout << "LLONG_MAX: " << LLONG_MAX << std::endl;
    std::cout << "LLONG_MIN: " << LLONG_MIN << std::endl;
    std::cout << "ULLONG_MAX: " << ULLONG_MAX << std::endl;
    return 0;
}

运行结果:

linrongjian@hhb-ssd:/data/modern_cpp$ g++ -std=c++11 new_type.cpp -o new_type
linrongjian@hhb-ssd:/data/modern_cpp$ ./new_type
LLONG_MAX: 9223372036854775807
LLONG_MIN: -9223372036854775808
ULLONG_MAX: 18446744073709551615

字符类型 char16_t 和 char32_t(C++11)

C++11 增加了两种字符类型 char16_t 和 char32_t,分别对应 Unicode 字符集的 UTF-16 和 UTF-32 编码方法。

普通的 char 类型针对的是 UTF-8 编码,C++11 为三种编码提供了前缀(加在字符常量前面): u8UTF-8)、uUTF-16)UUTF-32)。

C++11 为什么要引入 char16_t 和 char32_t?

C++98 的宽字符类型 wchar_t 在不同的平台长度不同,因此也就会导致不同的行为。

char16_t 和 char32_t 的引入就是为了解决这个问题,它们明确规定了所占内存空间的大小:char16_t 占 2 字节,char32_t 占 4 字节。

C++ 标准的字符串也加入了对新字符类型的支持:

usinig u16string = basic_string<char16_t>;
usinig u32string = basic_string<char32_t>;
usinig wstring = basic_string<wchar_t>;

字符类型 char8_t(C++20)

C++20 之前使用 char 处理 UTF-8 字符,但是当库函数要同时处理多种字符时需要区分普通字符和 UTF-8 字符。

于是,C++20 引入了 char8_t 字符类型,它代替了 char 作为 UTF-8 的字符类型。

char8_t 类型和 unsigned char 具有相同的符号属性、存储大小、对齐方式以及整数转换等级。

参考资料

  1. 现代C++语言核心特性解析
  2. cppreference:char16_t
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值