首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >STL iota包括文件更改

STL iota包括文件更改
EN

Stack Overflow用户
提问于 2017-03-22 18:21:47
回答 2查看 647关注 0票数 2

iota函数以前在<algorithm>头中。它已经变成了<numeric>

我需要保留旧的向后兼容性方式,因此我想使用预处理器选项来选择要包含的正确的标头。

这是什么时候改变的,我应该使用哪个预处理选项?

EN

回答 2

Stack Overflow用户

发布于 2017-03-22 20:10:19

iota从来没有从<algorithm>被“移走”过。C++03在任何标头中都没有std::iota,并且没有符合的实现可以提供它,因为iota不是一个保留的名称,这是工作所必需的:

代码语言:javascript
复制
#define iota arbitrary preprocessing token sequence like this and *that and "!" and \
             -13833rfa231fn7or.other.line.noise.that.happens.to.be.a.pp.number
#include <every-standard-header-here>

它是在<numeric> in C++11中添加的,也是SGI STL's <numeric>中的一个扩展,它从未出现在<algorithm>中,因此不可能从<algorithm>中移出。

现在,由于允许标准库头以任意方式相互包含,GCC <= 5在C++11模式下的<algorithm>按偶然性包含<random>,而在偶然中包含<numeric>。这仅仅是一个不应该依赖的实现细节,GCC 6不再这样做了。修复方法是简单地包含正确的标头,它是,而且一直是<numeric>

票数 4
EN

Stack Overflow用户

发布于 2017-03-22 18:34:36

您要做的是检查__cplusplus变量是否在某个点以下,如果不是#include <algorithm>,则检查#include <numeric>

代码语言:javascript
复制
#if __cplusplus <= 199711L
  #include <algorithm>
#else
  #include <numeric>
#endif

这应该适用于您需要使用的任何库,只需注意,您可能必须将199711L更改为适当的编号。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42959812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档