在使用Visual Studio 2013的C ++编译器时,我注意到我的代码依赖size_t正确编译,即使没有包含任何定义它的标头(例如#include <stddef.h>
或#include <string.h>
)。
我进行了测试,是因为我喜欢这样的想法:不为整个琐碎的事情包括整个标头。我觉得这会使我的代码肿。我得出结论size_t
,即使代码中没有任何标头包含,Visual Studio 2013的C ++编译器也会自动定义。
在享受这一点的同时,我开始担心可移植性。对我来说,编码的便利性和感觉就像我的代码优雅一样,比绝对的可移植性更重要。但我仍然想要一些可移植性。例如,我不介意使用,#pragma once
因为大多数编译器都支持它,并且标头防护很麻烦(尤其是在Visual Studio中),但是我绝不会因为一个编译器支持而导出模板。
因此,我的问题是,size_t的自动定义是许多编译器提供的广泛功能,还是Microsoft编译器特有的功能?
这种行为当然并不普遍。按照标准指定,GCC和Clang都要求包含<cstddef>
forstd::size_t
或已弃用的<stddef.h>
for ::size_t
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句