size_t 要包括哪个 header

Which header to include for size_t

根据cpprefernecesize_t在各种header中定义,即 cstddef、cstdio、cstdlib、cstring、ctime、cuchar 和(C++17 起)cwchar.

我的问题是为什么 size_t 没有一个单一的定义?如果我只想要 size_t,我应该包括哪个 header?

My question is why is there not a single definition of size_t?

std::size_t 有一个定义。它只是在多个 headers 中定义,因为那些 headers 自己使用该定义。

Which header do I include, if I just want size_t?

指定定义它的任何一个。

我的选择通常是 <cstddef>,因为它非常小并且具有我可能需要的其他定义,例如 std::byte

通常,任何标准库 header 都可以将任何其他 header 的声明引入 std 命名空间,但这些声明将始终引用同一个实体,因此不会' 是任何 one-definition-rule 违规或类似的事情。 cppreference 上列出的 header 只是保证它们引入 std::size_t.

的那些

<cstddef> 可能是 header 中最小的,也将在独立环境中可用。

但是请注意,列出的 header 中的 none 保证将 size_t 引入全局命名空间范围。如果你需要这个,你需要包括 headers 的一个 C 版本,例如#include<stddef.h>.