内置类型 (C++)

内置类型(也称基本类型)由 C++ 语言标准指定,内置于编译器中。 内置类型未在任何头文件中定义。 内置类型分为三个主要类别:整型、浮点和 void。 整型类型表示整数。 浮点类型可以指定可能有小数部分的值。 编译器将大多数内置类型视为非重复类型。 但是,某些类型是同义词,或被编译器视为等效类型。

Void 类型

void 类型描述值的空集。 无法指定类型为 void 的变量。 void 类型主要用于声明不返回值的函数,或用于声明指向非类型化或任意类型化数据的一般指针。 任何表达式都可以显示或强制转换为类型 void。 但是,此类表达式仅限于下列用途:

  • 表达式语句。 (有关详细信息,请参阅表达式。)

  • 逗号运算符的左操作数。 (有关详细信息,请参阅逗号运算符。)

  • 条件运算符 (? :) 的第二个或第三个操作数。 (有关详细信息,请参阅带条件运算符的表达式。)

std::nullptr_t

关键字 nullptr 是类型为 std::nullptr_t 的 null 指针常量,该类型可转换为任何原始指针类型。 有关详细信息,请参阅 nullptr

布尔类型

bool 类型的值可以是 truefalsebool 类型的大小特定于实现。 有关特定于 Microsoft 的实现的详细信息,请参阅内置类型的大小

字符类型

char 类型是一种字符表示类型,可有效地对基本执行字符集的成员进行编码。 C++ 编译器将 char, signed charunsigned char 类型的变量视为不同类型。

特定于 Microsoftchar 类型的变量将提升到 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 doubledouble 的表示形式完全相同。 但是,编译器将 long doubledouble 视为非重复类型。 Microsoft C++ 编译器使用 4 字节和 8 字节 IEEE-754 浮点表示形式。 有关详细信息,请参阅 IEEE 浮点表示形式

整数类型

int 类型是默认的基本整数类型。 它可以表示某个特定于实现的范围的所有整数。

带符号整数表示形式可以同时保存正值和负值。 它默认使用,或者在存在 signed 修饰符关键字时使用。 unsigned 修饰符关键字指定一个只能保存非负值的无符号表示形式。

大小修饰符指定使用的整数表示形式的宽度(以位为单位)。 语言支持 shortlonglong long 修饰符。 short 类型必须至少为 16 位宽。 long 类型必须至少为 32 位宽。 long long 类型必须至少为 64 位宽。 C++ Standard 指定整型类型之间的大小关系:

1 == sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long)

一个实现必须同时维护每种类型的最小大小要求和大小关系。 但是,实际大小在不同实现之间可能且确实有所不同。 有关特定于 Microsoft 的实现的详细信息,请参阅内置类型的大小

指定 signedunsigned 或大小修饰符时,可以省略 int 关键字。 修饰符和 int 类型(如果存在)可能按任何顺序显示。 例如,short unsignedunsigned int short 指同一类型。

整数类型同义词

编译器将以下类型组视为同义词:

  • short, short int, signed short, signed short int

  • unsigned shortunsigned short int

  • int, signed, signed int

  • unsignedunsigned int

  • long, long int, signed long, signed long int

  • unsigned longunsigned long int

  • long long, long long int, signed long long, signed long long int

  • unsigned long longunsigned long long int

特定于 Microsoft 的整数类型包括特定宽度的 __int8__int16__int32__int64 类型。 这些类型可以使用 signedunsigned 修饰符。 __int8 数据类型与 char 类型同义,__int16short 类型同义,__int32int 类型同义,__int64long 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 字节

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

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

另请参阅

数据类型范围