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_t
在cstdint
所述内std
命名空间.
在我的代码中,我既没有包含cstdint
也没有使用std
命名空间.为什么编译器不抱怨呢?
该名称int32_t
还出现在C库头的全局范围内stdint.h
.这可能会使它在C++中全局可见.
[Headers]部分说:
...每个标题cname的内容与C标准库中指定的相应标题name.h的内容相同.但是,在C++标准库中,声明(除了在C中定义为宏的名称除外)都在命名空间std的命名空间范围内. 未指定这些名称(包括[language.support]中通过[thread]和[depr]添加的任何重载)是否首先在全局命名空间范围内声明,然后通过显式using-declarations注入到命名空间std中.
该标准还有一个全面的声明:
C++标头可能包含其他C++标头.
因此,通过将<iostream>
你保证看到流对象,但可能也发生以访问其他一些图书馆的功能,以及.
由于这些间接包含未指定,因此实现之间的结果会有所不同.因此,程序应始终包含所需的所有头,以便可移植到不同的编译器.
归档时间: |
|
查看次数: |
545 次 |
最近记录: |