C ++ std ::类型而不是相应的c类型

时间:2018-12-12 13:28:01

标签: c++

例如,考虑<cstdint>标头。 C ++标准says

  

标头定义了与C标准库标头<stdint.h>相同的所有类型和宏。

那么是否需要在某处使用说std::int8_t而不是简短的C形式int8_t

1 个答案:

答案 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::中)是合法的实现,但是只有第二种将名称放在全局范围内。