哪些 C++ 编译器自动定义 size_t 而无需 header 包含?

Which C++ compilers automatically define size_t without requiring a header include?

在使用 Visual Studio 2013 的 C++ 编译器时,我注意到我的代码依赖 size_t 正确编译,即使不包含任何 headers 定义它(即 #include <stddef.h>#include <string.h>)。

我测试了这个,因为我有点喜欢不包括整个 header 的想法,只是为了像这样的微不足道的事情;我觉得它使我的代码膨胀。我的结论是 Visual Studio 2013 的 C++ 编译器自动定义了 size_t,即使代码中没有任何 header 包含。

在享受这个的同时,我开始担心便携性。编码方便,感觉我的代码很优雅,对我来说比绝对可移植性更重要;但我仍然想要一些 可移植性。例如,我不介意使用 #pragma once 因为大多数编译器都支持它并且 header 守卫很麻烦(尤其是在 Visual Studio 中),但我绝不会仅仅因为导出模板一位编译器支持它。

所以,我的问题是,size_t 的自动定义是许多编译器提供的广泛功能,还是特定于 Microsoft 的编译器?

这种行为当然不普遍; GCC 和 Clang 都要求为 std::size_t 包含 <cstddef>,或者为 ::size_t 包含已弃用的 <stddef.h>,正如标准所指定的那样。

Neither gcc nor clang contain a similar violation of the C++ standard.

在 3 之间,MSVC gcc 和 clang 是绝大多数编译器。

icc 13.0.1也是如此。

我没试过ECG,请自便。