我一直认为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;
};
答案 0 :(得分:5)
random()
是Single Unix Specification的一部分。它不是C ++标准的一部分。这就是为什么它不在Windows上,而是在大多数Unix / Mac平台上都可以找到。
答案 1 :(得分:2)
因为编译器编写者可以自由地向语言库添加额外的东西,以使您的工作更轻松。通常,这不会是一个问题,因为它将它们放在一个你不会添加内容的命名空间中,std
。
你的问题来自那条小线
using namespace std;
这将所有从std
拉入程序的命名空间,包括编译器编写者有用提供的std::random
。如果您明确声明从std
提取的内容,则不会使用random
来破坏您的本地std::random
:
using std::rand;
using std::srand;
另请参阅c ++ FAQ lite中的this question。