我继承了一个2014年编写的C++项目,该项目确实使用GCC 4.8编译。在一个特定的文件中,实例化了当前在C++标准库的<random>
头中找到的几个类。其中包括mt19937
、random_device
、uniform_real_distribution
和normal_distribution
。
当我用GCC 7.3编译这个文件时,我得到一个错误,说这些类没有在std
命名空间中定义。当我包含<random>
时,这个错误(显然(会消失。
我的问题是为什么GCC 4.8中没有出现这个错误?这些类以前是在不同的标题下找到的吗?
标准标头可能包括其他标头。当它们共享一个实现时,这可能很有用。然而,这些事情可能会随着时间的推移而改变,例如,当公共部分被重构为第三个(内部(头文件时。
由于我们不知道<random>
是如何间接包含在GCC4.8中的,我们不能对所发生的事情持绝对肯定的态度,但这并不奇怪。