在函数 C++14 中包含 STL 头文件

include STL header file inside a function C++14

本文关键字:STL 文件 包含 函数 C++14      更新时间:2023-10-16

tl;dr:我可以以某种方式使这段代码在 C++14 (GCC 6.3( 中工作吗?

int main(){
#include<vector>
std::vector<int> v{1,2,3};
return 0;
}

但是下面的代码工作得很好!

#include <iostream>
using namespace std;
int main() {
#include<cstdio>
using namespace __gnu_cxx;
printf("Hello worldn.");
return 0;
}

使用 C++14 (gcc-6.3( 代码无法编译,错误消息为

error: 'namespace' definition is not allowed here
namespace std
^~~~~~~~~

我为什么要这样做?

在允许我编码的函数之外,我无法访问。我无法在全球地区 #include。

UPD:更改为 cstdlib 也可以解决问题,不是标头保护排除(据我说(,而是命名空间问题。因为C++头文件具有命名空间 std,而 c 头文件没有。我想问一下命名空间问题是否有一些调整?

我可以以某种方式使这段代码工作吗

不。标准标头(以及一般的大多数库标头(必须包含在全局命名空间范围内。

但是下面的代码工作得很好!

但它不能保证有效。它只是碰巧起作用,可能是因为<iostream>已经包含了<cstdio>,所以你自己的包含被标题护卫删除了。