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

How am I able to use int32_t without without using std?

本文关键字:int32 情况下 std      更新时间:2023-10-16

这是我的代码:

#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++标准似乎在std命名空间中定义了cstdint中的int32_t

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

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

[标题]部分说:

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

该标准还有一个笼统的声明:

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

因此,通过包含<iostream>,您可以保证看到流对象,但也可能会碰巧访问其他一些库功能。

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