目录
整数类型 long long(C++11)
C++11 增加了 long long 和 unsigned long long 两种整数类型。
long long int
类型和 long long
等价, unsigned long long int
类型和 unsigned long long
等价。
可以用后缀 LL
和 ULL
来表示这两种类型的变量:
long long x = 65536LL;
long long y = 65536ULL;
C++
标准中使用了宏 LLONG_MAX
、LLONG_MIN
、ULLONG_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
为三种编码提供了前缀(加在字符常量前面): u8
(UTF-8
)、u
(UTF-16)
和 U
(UTF-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
具有相同的符号属性、存储大小、对齐方式以及整数转换等级。