为什么 mingw 4.4 说<random>需要 c++0x?
Why is mingw 4.4 saying <random> needs c++0x?
为什么要说明显的答案以外的话。另外,我该如何解决这个问题,我不想在此项目中添加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(...);
...
- std::原子加载和存储都需要吗
- 需要帮助设置在C++中使用的Potrace
- 是否需要删除包含对象的"pair"?
- Arduino:for/while/if在void setup()或void loop()之前?——错误:之前需要不合格
- C++我需要了解在哪里使用指针和双指针
- 为什么即使使用-cudart-static进行编译,库用户仍然需要链接到cuda运行时
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- 当使用透明的std函数对象时,我们还需要写空的尖括号吗
- 我需要将多个函数组合为一个函数
- 概念中的cv限定符需要表达式参数列表
- 是否有类似std::lower_bound的函数,而不需要排序/分区输入
- 库函数需要一个 std::function<void(void)>,如何传入类函数?
- 需要从 istream 和 ostream 派生 iostream
- 为什么 mingw 4.4 说<random>需要 c++0x?
- 如何告诉超级计算机上的C++编译器我的R包需要C++0x
- gem install nmatrix - 你需要一个支持 -std=c++0x 或 -std=c++11 的 g++
- 为什么 g++ 4.6.2 仍然需要"-std=c++0x"?
- 在c++中编译-std=c++0x需要什么?
- 错误 C1189: #error:此文件需要至少 #defined_WIN32_WINNT才能0x0500.建议使用0x