代码之家  ›  专栏  ›  技术社区  ›  Lone Learner

在不使用std的情况下如何使用int32_t?

  •  4
  • Lone Learner  · 技术社区  · 6 年前

    这是我的代码:

    #include <iostream>
    
    int main()
    {
        int32_t i = 5;
        std::cout << "i: " << i << '\n';
    }
    

    以下是输出:

    $ clang++ -std=c++11 -pedantic -Wall -Wextra foo.cpp && ./a.out 
    i: 5
    

    我的问题是:

    C++标准似乎定义了 int32_t 在里面 cstdint std 命名空间。

    在我的代码中,我没有包括 CSTDINT公司 我也不使用 性病 命名空间。那么为什么编译器不抱怨呢?

    1 回复  |  直到 6 年前
        1
  •  6
  •   Bo Persson tox    6 年前

    名字 int32_t 也出现在C库头的全局范围中 stdint.h . 这可能使它在C++中也能全局可见。

    该部分 [Headers] 说:

    …每个标题的内容 cNeNe 与对应的标题相同 姓名H 如C标准库中所述。 然而,在C++标准库中,声明(除了在C中定义为宏的名称)位于命名空间STD的命名空间范围内。 这些名字是否 (包括通过[thread]和[dep]在[language.support]中添加的任何重载) 首先在全局命名空间范围内声明,然后通过显式using声明注入到命名空间std中 .

    该标准也有 a blanket statement :

    C++头可以包括其他C++头。

    所以通过包括 <iostream> 你是 放心 查看流对象,但可能 也可以访问其他一些库功能。

    由于这些间接包含是未指定的,因此结果因实现而异。所以程序应该始终包含它需要的所有头文件,以便移植到不同的编译器。