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

时间:2015-04-09 15:58:09

标签: c++ visual-studio-2013 size-t

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

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

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

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

2 个答案:

答案 0 :(得分:10)

这种行为当然并不普遍;根据标准规定,GCC和Clang都要求<cstddef>包含std::size_t<stddef.h>已弃用::size_t

答案 1 :(得分:4)

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

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

icc 13.0.1也是如此。

我没有尝试ECG,请自己解脱。