为什么 mingw 4.4 说<random>需要 c++0x?

Why is mingw 4.4 saying <random> needs c++0x?

本文关键字:需要 c++0x gt lt mingw 为什么 random      更新时间:2023-10-16

为什么要说明显的答案以外的话。另外,我该如何解决这个问题,我不想在此项目中添加C 11代码。

#include <random>

mingw 4.4(使用QTSDK发货的版本,而不是使用QT库,只有QT Creator)

此文件需要编译器和库支持即将到来的ISO C 标准,C 0x。此支持目前是实验性的,必须是使用-STD = C 0x或-std = GNU 0x编译器选项。

<random>标头仅添加到C 0x中的C 标准中。如果您尝试在C 98模式下使用<random>,则将标准库实施者列入预处理器指令,出于两个原因之一:

之一:

如果标题文件利用了新的C 0x语言功能,则它在默认的C 98模式下根本无法使用。C 0x错误消息,因此您会理解为什么它不起作用,而不必找出"未知关键字"和其他错误消息的汤的含义。

如果标题文件不需要任何新的C 0x语言功能,则在那里C 0x错误消息,因此您不会意外地使用它以为它在C 98中可用。如果您要这样做,然后其他人试图将您的代码完全编译到<random>标头完全没有运送CC_3标题的C 编译器上(例如,您旨在通过限制自己来支持的GCC的较旧版本对于C 98),他们会很生气。

<random>标头仅在C 0x中存在(现在称为C 11)。

如果要在没有新标准的情况下生成随机数,则可以包括<cstdlib>并使用rand()函数。

注意:如果您使用的是rand(),请记住使用唯一的东西,例如当前时间。

另外一个选项:使用boost,因为C 11标准库主要基于它。切换到boost是微不足道的,但是如果这是一个小项目,boost可能太大了。

如果您想围绕C 11工作,则可以使用Boost的随机库代替C 11,尽管它可能不是1to1端口,但它们都具有相同的功能,并且非常相似。该解决方案比用C的rand函数重写所有随机位要容易得多请参阅此处的Boost Random

您可以使用随机设施的TR1版本,尽管如果您完全允许使用C 11,我不建议它。当进入C 11时,TR1随机设施发生了实质性更改。

我可以从个人经验中说,在GCC(LIBSTDC )中,TR1库处于深度维护模式。只有STD组件得到爱。

如果您必须使用C 98

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