内置类型 (C++)

内置类型(也称基本类型)由 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 字节

有关每个类型的值的范围的摘要,请参阅数据类型范围。

有关类型转换的详细信息,请参阅标准转换。

另请参阅

数据类型范围