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

mad*_*127 0 c++ stl c++14

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

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

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

#include <iostream>
using namespace std;

int main() {
    #include<cstdio>
    using namespace __gnu_cxx;
    printf("Hello world\n.");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

使用C++ 14(gcc-6.3)代码时不会编译错误消息

 error: 'namespace' definition is not allowed here
 namespace std
 ^~~~~~~~~
Run Code Online (Sandbox Code Playgroud)

我为什么要这样做?

我无权访问允许编码的函数.我不能在全球范围内#include.

UPD:更改为cstdlib也有效问题不是由标题保护(根据我)排除,而是名称空间问题.因为C++头文件具有命名空间std,而c头文件没有.我想问一下命名空间问题是否有一些调整?

eer*_*ika 5

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

不可以.标准头文件(通常是大多数库头文件)必须包含在全局命名空间范围内.

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

但它不能保证工作.它恰好正常工作,可能是因为<iostream>已经包含了<cstdio>所以你自己的包含被标题保护删除了.