内置类型(也称基本类型)由 C++ 语言标准指定,内置于编译器中。 内置类型未在任何头文件中定义。 内置类型分为三个主要类别:整型、浮点和 void。 整型类型表示整数。 浮点类型可以指定可能有小数部分的值。 编译器将大多数内置类型视为非重复类型。 但是,某些类型是同义词,或被编译器视为等效类型。
Void 类型
void 类型描述值的空集。 无法指定类型为 void 的变量。
void 类型主要用于声明不返回值的函数,或用于声明指向非类型化或任意类型化数据的一般指针。 任何表达式都可以显示或强制转换为类型 void。 但是,此类表达式仅限于下列用途:
std::nullptr_t
关键字 nullptr 是类型为 std::nullptr_t 的 null 指针常量,该类型可转换为任何原始指针类型。 有关详细信息,请参阅 nullptr。
布尔类型
bool 类型的值可以是 true 和 false。
bool 类型的大小特定于实现。 有关特定于 Microsoft 的实现的详细信息,请参阅内置类型的大小。
字符类型
char 类型是一种字符表示类型,可有效地对基本执行字符集的成员进行编码。 C++ 编译器将 char, signed char和 unsigned char 类型的变量视为不同类型。
特定于 Microsoft:char 类型的变量将提升到 int,就像在默认情况下从 signed char 类型提升一样,除非使用 /J 编译选项。 在这种情况下,它们被视为 unsigned char 类型并提升为 int(没有符号扩展)。
wchar_t 类型的变量是宽字符或多字节字符类型。 在字符或字符串文本前使用 L 前缀可指定宽字符类型。
特定于 Microsoft:默认情况下,wchar_t 是原生类型,但你可以使用 /Zc:wchar_t- 使 wchar_t 成为 unsigned short 的 typedef。
__wchar_t 类型是本机 wchar_t 类型的 Microsoft 专用同义词。
char8_t 类型用于 UTF-8 字符表示形式。 它具有与 unsigned char 相同的表示形式,但被编译器视为非重复类型。
char8_t 类型是 C++20 中的新增类型。 特定于 Microsoft:使用 char8_t 需要 /std:c++20 编译器选项或更高版本(例如 /std:c++latest)。
char16_t 类型用于 UTF-16 字符表示形式。 它必须足够大才能表示任何 UTF-16 代码单元。 它被编译器视为非重复类型。
char32_t 类型用于 UTF-32 字符表示形式。 它必须足够大才能表示任何 UTF-32 代码单元。 它被编译器视为非重复类型。
浮点类型
浮点类型使用 IEEE-754 表示形式在各种数量级上提供小数值的近似值。 下表列出了 C++ 中的浮点类型以及浮点类型大小的相对限制。 这些限制由 C++ Standard 强制施加,独立于 Microsoft 实现。 C++ Standard 中未指定内置浮点类型的绝对大小。
| 类型 | 目录 |
|---|---|
float |
在 C++ 中,float 类型是最小的浮点类型。 |
double |
double 类型是大于或等于 float类型的大小但小于或等于 long double类型的大小的浮点类型。 |
long double |
long double 类型是大于或等于 double类型的浮点类型。 |
特定于 Microsoft:long double 和 double 的表示形式完全相同。 但是,编译器将 long double 和 double 视为非重复类型。 Microsoft C++ 编译器使用 4 字节和 8 字节 IEEE-754 浮点表示形式。 有关详细信息,请参阅 IEEE 浮点表示形式。
整数类型
int 类型是默认的基本整数类型。 它可以表示某个特定于实现的范围的所有整数。
带符号整数表示形式可以同时保存正值和负值。 它默认使用,或者在存在 signed 修饰符关键字时使用。
unsigned 修饰符关键字指定一个只能保存非负值的无符号表示形式。
大小修饰符指定使用的整数表示形式的宽度(以位为单位)。 语言支持 short、long 和 long long 修饰符。
short 类型必须至少为 16 位宽。
long 类型必须至少为 32 位宽。
long long 类型必须至少为 64 位宽。 C++ Standard 指定整型类型之间的大小关系:
1 == sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long)
一个实现必须同时维护每种类型的最小大小要求和大小关系。 但是,实际大小在不同实现之间可能且确实有所不同。 有关特定于 Microsoft 的实现的详细信息,请参阅内置类型的大小。
指定 int、signed 或大小修饰符时,可以省略 unsigned 关键字。 修饰符和 int 类型(如果存在)可能按任何顺序显示。 例如,short unsigned 和 unsigned int short 指同一类型。
整数类型同义词
编译器将以下类型组视为同义词:
short、short int、signed short、signed short int%>
.- .
%>
long、long int、signed long、signed long int%>
long long、long long int、signed long long、signed long long int%>
特定于 Microsoft 的整数类型包括特定宽度的 __int8、__int16、__int32 和 __int64 类型。 这些类型可以使用 signed 和 unsigned 修饰符。
__int8 数据类型与 char 类型同义,__int16 与 short 类型同义,__int32 与 int 类型同义,__int64 与 long long 类型同义。
内置类型的大小
大多数内置类型都有由实现定义的大小。 下表列出了 Microsoft C++ 中的内置类型所需的存储量。 具体而言,即使在 64 位操作系统上,long 也是 4 个字节。
| 类型 | 大小 |
|---|---|
bool、char、char8_t、unsigned char、signed char、__int8 |
1 个字节 |
char16_t、__int16、short、unsigned short、wchar_t、__wchar_t |
2 个字节 |
char32_t、float、__int32、int、unsigned int、long、unsigned long |
4 个字节 |
double、__int64、long double、long long、unsigned long long |
8 字节 |
有关每个类型的值的范围的摘要,请参阅数据类型范围。
有关类型转换的详细信息,请参阅标准转换。