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

madhur4127

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头文件则没有。我想问一下是否对名称空间有一些调整?

埃雷里卡

我可以以某种方式使此代码有效吗

否。必须将标准标头(以及通常的大多数库标头)包括在全局名称空间范围中。

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

但这并不能保证能正常工作。它只是碰巧起作用了,可能是因为<iostream>已经包含了<cstdio>,所以标题保护程序删除了您自己的包含。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章