为什么random()在cstdlib中有效?(Ubuntu 10.10)

dec*_*iar 0 c++ random overloading ambiguous

我一直认为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;
};
Run Code Online (Sandbox Code Playgroud)

此外,下面在Ubuntu上正确编译,在检查stdlib.h之后出现,其中,random()和srandom()等未在std命名空间中声明.这使得它成为一个完全痛苦的屁股......

#include <iostream>
#include <cstdlib>

int main() {
    std::cout << random();
    return 0;
};
Run Code Online (Sandbox Code Playgroud)

Nat*_*ate 5

random()单Unix规范的一部分.它不是C++标准的一部分.这就是为什么它不在Windows上,但在大多数Unix/Mac平台上都可以找到.