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

时间:2018-06-15 18:31:57

标签: c++ stl c++14

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 world\n.");
    return 0;
}

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

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

为什么我要这样做?

     

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

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

1 个答案:

答案 0 :(得分:5)

  

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

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

  

但是下面的代码工作正常!

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