不基础的“基础类型”

相信你在 C++ 入门的时候就已经接触到了基础类型这个概念,但是,你真的完全理解了基础类型吗?

布尔型

bool 非常简单,标准只要求它能存储 truefalsesizeof(bool) 由实现定义,可以不为 1。

整型与字符类型

首先有几个冷知识:

  1. 整型的修饰符可以调换顺序。如 unsigned long long int 等价于 long long unsigned intlong int long unsigned
  2. long long 实际上在 C++11 里才写入标准中,尽管很多编译器并不需要开启 -std=c++11 或更高版本的编译选项都可认识 long long
数据类型 最小长度/bit
short 16
int 16
long 32
long long [C++11 起] 64 [C++11 起]
char 无定义[C++14 前] / 8[C++14 起]

C++ 标准还保证 1 == sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long)

浮点数

这才是本文的重点。

Reference

https://zh.cppreference.com/w/cpp/language/types