0

我一直以为 cstdlib 中的随机函数只有 rand 和 srand,但是下面的工作(在 Ubuntu 10.10 上用 g++ 编译)?

我实际上在从 Windows 迁移到 Ubuntu 时发现了这一点,我的编译失败了,因为它模棱两可地重载(我已经声明了我自己的“random()”函数)。

#include <cstdlib>
#include <iostream>

using namespace std;

int main() {
 srandom(50);
 cout << random();
 return 0;
};

以下在 Ubuntu 上也可以正确编译,在检查 stdlib.h 后,random() 和 srandom() 等未在 std 命名空间中声明。这让它彻底痛彻心扉……

#include <iostream>
#include <cstdlib>

int main() {
    std::cout << random();
    return 0;
};
4

2 回答 2

5

random()Single Unix Specification的一部分。它不是 C++ 标准的一部分。这就是为什么它不在 Windows 上而是在大多数 Unix/Mac 平台上找到的原因。

于 2011-01-11T05:52:58.167 回答
2

因为编译器编写者可以自由地向语言库添加额外的东西,以使您的工作更轻松。通常,这不会是一个问题,因为它将它们放在一个名称空间中,您不会向其中添加内容,std.

你的问题来自那条小线

using namespace std;

这会将所有内容std程序的命名空间中提取出来,包括std::random编译器编写者提供的有用的命名空间。如果您改为明确声明要从中提取的内容std,则不会random使用以下内容破坏本地std::random

using std::rand;
using std::srand;

另请参阅c++ FAQ lite 中的这个问题

于 2011-01-11T05:53:41.020 回答