首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我的std::exchange不在名称空间std中吗?

我的std::exchange不在名称空间std中吗?
EN

Stack Overflow用户
提问于 2017-01-12 13:59:43
回答 1查看 2.3K关注 0票数 1

我在源文件中包含了<utility>。然后我使用了std::exchange,但是编译器说它没有在命名空间std中找到exchange。我查看了usr/include/utility,通过搜索exchange找到了实现,它在namespace std块中。为了使代码编译,我不得不从std::中删除std::exchange

我能解决这个问题吗?

否则如何使我的代码可移植?

注意:我正在使用Android上Termux仿真器中的clang。我用apt安装它,获得了巨大的成功。

EN

回答 1

Stack Overflow用户

发布于 2017-01-12 14:04:57

std::exchange是在C++14中引入的,如果您使用C++11,那么它就不是标准提供的。

解决方案:使用与C++14兼容的实现(这可能需要显式地启用支持,这取决于它是否是默认的)。

否则如何使我的代码可移植?

你可以自己实现它。下面是优先选择的一个可能的实现。

template T exchange(T& obj,U& new_value) {T old_value = std::move( obj );obj= std::forward(new_value);返回old_value};

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

https://stackoverflow.com/questions/41615077

复制
相关文章

相似问题

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