繁体   English   中英

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

[英]include STL header file inside a function 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头文件没有。 我想问一下是否对名称空间有一些调整吗?

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM