【问题标题】:My std::exchange is not in namespace std?我的 std::exchange 不在命名空间 std 中?
【发布时间】:2017-01-12 13:59:43
【问题描述】:

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

我可以解决这个问题吗?

否则我怎样才能使我的代码可移植?

注意:我在 Android 上使用 Termux linux 模拟器中的 clang。我通过使用apt 安装它得到了clang。

【问题讨论】:

  • 您是否启用了c++14clang -std=c++14?
  • @Holt 我正在使用 c++11... 我会尝试改变它。正如我所说,没有std:: 它仍然有效。
  • 根据cppreferencestd::exchange是一个C++14函数。在此之前clang定义它可能只是纯粹的巧合。
  • @Holt 好的,c++14 解决了这个问题。谢谢你。

标签: c++ c++11 namespaces std


【解决方案1】:

std::exchange 是在 C++14 中引入的。如果你使用C++11,那么标准没有提供。

解决方案:使用符合 C++14 的实现(可能需要显式启用支持,具体取决于它是否为默认)。

否则我怎样才能使我的代码可移植?

您可以自己实现它。这是cppreference 的一个可能实现。

template<class T, class U = T>
T exchange(T& obj, U&& new_value)
{
    T old_value = std::move(obj);
    obj = std::forward<U>(new_value);
    return old_value;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-03
    • 1970-01-01
    • 1970-01-01
    • 2020-10-03
    • 2013-05-27
    • 2012-11-08
    • 1970-01-01
    相关资源
    最近更新 更多