Jon*_*Mee 6 c++ types namespaces size-t global-namespace
所以我知道C Compatability Headers中的任何标题:
在全局命名空间中放置相应的cxxx头将放置在
std命名空间中的每个名称
我也知道这些C头文件在c ++ 17中已被弃用,赞成它们的兼容性"cxxx"对应物.
现在,我相信它size_t仅由标准定义标题定义.所以我认为这在技术上意味着size_t全局命名空间中的定义已被弃用?
我已经使用它多年了,size_t而且在转向使用之前我只是想确认一下std::size_t.
我认为这在技术上意味着全局命名空间中size_t的定义已被弃用?
该标准仅任务std::size_t必须被定义1通过<cstddef>,它不会禁止以限定一个实现::size_t2,但如果执行呢,这两个定义必须匹配3.
作为结论,您应该使用std::size_t并且既不应该依赖于::size_t定义也不应该定义它.
以下是UB:
// DON'T
using size_t = std::size_t; // UB
using size_t = decltype(sizeof 1); // UB
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)namespace std { using ptrdiff_t = see below; using size_t = see below; using max_align_t = see below; using nullptr_t = decltype(nullptr);[...]
标题的内容和含义<cstddef>与C标准库标题相同<stddef.h>,只是它没有声明类型wchar_t,它还声明了类型byte及其关联的操作([support.types.byteops]),并且如[support.types.nullptr]和中所述[support.types.layout].
对于每种类型的
T从C标准库(这些类型[...]size_t[...]),其种类::?T和std?::?T被保留到执行[.]
[...]定义时,
?::?T应与... 相同std?::?T.