内置类型(也称基本类型)由 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 的实现的详细信息,请参阅内置类型的大小。
指定 signed
、unsigned
或大小修饰符时,可以省略 int
关键字。 修饰符和 int
类型(如果存在)可能按任何顺序显示。 例如,short unsigned
和 unsigned int short
指同一类型。
整数类型同义词
编译器将以下类型组视为同义词:
%>
.- .
%>
%>
%>
特定于 Microsoft 的整数类型包括特定宽度的 __int8
、__int16
、__int32
和 __int64
类型。 这些类型可以使用 signed
和 unsigned
修饰符。 __int8
数据类型与 char
类型同义,__int16
与 short
类型同义,__int32
与 int
类型同义,__int64
与 long long
类型同义。
内置类型的大小
大多数内置类型都有由实现定义的大小。 下表列出了 Microsoft C++ 中的内置类型所需的存储量。 具体而言,即使在 64 位操作系统上,long
也是 4 个字节。
类型 | 大小 |
---|---|
1 个字节 | |
2 个字节 | |
4 个字节 | |
8 字节 |
有关每个类型的值的范围的摘要,请参阅数据类型范围。
有关类型转换的详细信息,请参阅标准转换。