例如,考虑<cstdint>
标头。 C ++标准says:
标头定义了与C标准库标头
<stdint.h>
相同的所有类型和宏。
那么是否需要在某处使用说std::int8_t
而不是简短的C形式int8_t
?
答案 0 :(得分:6)
那么有必要在某处使用std :: int8_t而不是简短的C形式int8_t吗?
是的。对于[headers]/4,未指定C名称是否在全局名称空间中定义。因此,您需要std::int8_t
才能使用int8_t
。它不能保证std::int8_t
存在,只是可以保证std::int8_t
可以正常工作。
您只需添加using std::int8_t;
,这样就不必在整个地方键入std::int8_t
。
[headers] / 4的相关部分是
但是,在C ++标准库中,声明(除了在C中定义为宏的名称)在名称空间std的名称空间范围内
强调我的
这意味着我们知道它们在std::
中声明。
不确定是否先在全局名称空间范围内声明这些名称(包括通过[thread]和[depr]在[language.support]中添加的任何重载),然后通过显式using-declarations将它们注入到std名称空间中( [namespace.udecl])。
然后允许名称在全局名称空间中,但确实需要。这使实现可以执行类似的操作
<cstdint>
:
namespace std
{
#include <stdint.h>
}
或
<cstdint>
:
#include <stdint.h>
namespace std
{
using ::int8_t;
using ::int16_t;
//...
}
Bot可以完成相同的工作(将名称放在std::
中)是合法的实现,但是只有第二种将名称放在全局范围内。