哪些C++编译器自动定义size_t而不需要包含头?

RPF*_*ltz 4 c++ size-t visual-studio-2013

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

我测试了这个,因为我有点像不包括整个标题的想法只是为了那些微不足道的事情; 我觉得它膨胀了我的代码.我得出结论size_t,即使代码中没有任何头部包含,Visual Studio 2013的C++编译器也会自动定义.

在享受这一点的同时,我开始担心可移植性.编码方便,感觉像我的代码优雅,对我来说比绝对可移植性更重要; 但我还是喜欢一些便携性.例如,我不介意使用,#pragma once因为大多数编译器支持它并且标题保护是麻烦(特别是在Visual Studio中),但我绝不会因为一个编译器支持它而导致导出模板.

所以,我的问题是,size_t的自动定义是许多编译器提供的广泛特性,还是微软编译器特有的东西?

Mik*_*our 10

这种行为当然不普遍; GCC和锵要求列入<cstddef>std::size_t,或弃用<stddef.h>::size_t,作为标准规定.