【问题标题】:Why is mingw 4.4 saying <random> needs c++0x?为什么 mingw 4.4 说 <random> 需要 c++0x?
【发布时间】:2012-10-12 19:40:19
【问题描述】:

除了明显的答案之外,为什么要这么说。另外我该如何解决这个问题,我不想在这个项目中添加 c++11 代码。

#include <random>

mingw 4.4(QTSDK 附带的版本,但不使用 QT 库,仅使用 QT Creator)

此文件需要编译器和库支持,以支持即将推出的 \ ISO C++ 标准,C++0x。这种支持目前是实验性的,必须是\ 使用 -std=c++0x 或 -std=gnu++0x 编译器选项启用。

【问题讨论】:

  • 显而易见的答案有什么问题?你有理由相信显而易见的答案不是真的吗?
  • 我的意思是提供细节,而不仅仅是“它需要 c++0x”。有些人给出了很好的答案,我所需要的只是 rand/srand 访问。我多年来一直在 vs 中使用 ,不知道它是未完成标准的一部分。问题解决了,谢谢大家!
  • @EddieV223:标准于去年完成;这就是它现在被称为 C++11 的原因。

标签: c++ random c++11


【解决方案1】:

&lt;random&gt; 标头仅存在于 C++0x(现在称为 C++11)中。

如果您想在没有新标准的情况下生成随机数,可以包含&lt;cstdlib&gt; 并使用rand() 函数。

注意:如果您使用的是 rand(),请记住给 srand() 加上一些独特的东西,比如当前时间。

另一种选择:使用boost,因为C++11 标准库主要基于它。切换到boost 很简单,但如果这是一个小项目,boost 可能会太大。

【讨论】:

  • “如果这是一个小项目,boost 可能会太大” -- 你不必使用整个东西。
【解决方案2】:

如果你想使用 C++11,你可以使用 Boost 的随机库代替 C++11,尽管它可能不是 1to1 端口,但它们都具有相同的功能并且非常相似。这个解决方案比用 C 的过时 rand 函数重写所有随机位要容易得多 see the boost random here

【讨论】:

    【解决方案3】:

    &lt;random&gt; 标头仅在 C++0x 中添加到 c++ 标准中。如果您尝试在 C++98 模式下使用 &lt;random&gt;,标准库实现者会放入一个预处理器指令来出错,原因有两个:

    如果头文件利用了新的 C++0x 语言特性,那么它在默认的 C++98 模式下根本不起作用。那里有 C++0x 错误消息,以便您了解它为什么不起作用,而不必弄清楚“未知关键字”和其他错误消息的汤的含义。

    如果头文件不需要任何新的 C++0x 语言功能,那么 C++0x 错误消息就在那里,这样您就不会误以为它在 C++98 中可用。如果您要这样做,然后其他人试图在完全不提供 &lt;random&gt; 标头的仅 C++98 编译器上编译您的代码(例如,您打算支持的旧版本的 GCC将自己限制在 C++98),他们会很生气。

    【讨论】:

      【解决方案4】:

      您可以使用随机工具的 TR1 版本,但如果您完全允许使用 C++11,我不会推荐它。进入 C++11 后,TR1 随机工具发生了很大变化。

      我可以根据个人经验说,在 gcc (libstdc++) 中,TR1 库处于深度维护模式。只有 std 组件才会受到喜爱。

      如果你必须使用 C++98

      #include <tr1/random>
      ...
         std::tr1::name_of_random_thing(...);
      ...
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-04-20
        • 2011-04-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-31
        相关资源
        最近更新 更多