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

Lon*_*ner 4 c++ types namespaces header c++11

这是我的代码:

#include <iostream>

int main()
{
    int32_t i = 5;
    std::cout << "i: " << i << '\n';
}
Run Code Online (Sandbox Code Playgroud)

这是输出:

$ clang++ -std=c++11 -pedantic -Wall -Wextra foo.cpp && ./a.out 
i: 5
Run Code Online (Sandbox Code Playgroud)

这是我的问题:

C++标准出现,以限定int32_tcstdint所述内std命名空间.

在我的代码中,我既没有包含cstdint也没有使用std命名空间.为什么编译器不抱怨呢?

Bo *_*son 6

该名称int32_t还出现在C库头的全局范围内stdint.h.这可能会使它在C++中全局可见.

[Headers]部分说:

...每个标题cname的内容与C标准库中指定的相应标题name.h的内容相同.但是,在C++标准库中,声明(除了在C中定义为宏的名称除外)都在命名空间std的命名空间范围内. 未指定这些名称(包括[language.support]中通过[thread]和[depr]添加的任何重载)是否首先在全局命名空间范围内声明,然后通过显式using-declarations注入到命名空间std中.

该标准还有一个全面的声明:

C++标头可能包含其他C++标头.

因此,通过将<iostream>保证看到流对象,但可能发生以访问其他一些图书馆的功能,以及.

由于这些间接包含未指定,因此实现之间的结果会有所不同.因此,程序应始终包含所需的所有头,以便可移植到不同的编译器.