Почему random () работает в cstdlib? (Ubuntu 10.10) - PullRequest
0 голосов
/ 11 января 2011

Я всегда думал, что случайные функции в cstdlib были только rand и srand, но следующие работы (скомпилированные с g ++ в Ubuntu 10.10)?

Я на самом деле узнал об этом при переходе с 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;
};

Ответы [ 2 ]

5 голосов
/ 11 января 2011

random() является частью Single Unix Спецификации . Это не часть C ++ Standard. Вот почему это не в Windows, но встречается на большинстве платформ Unix / Mac.

2 голосов
/ 11 января 2011

Поскольку авторы компиляторов могут добавлять дополнительные элементы в языковую библиотеку, чтобы упростить вашу работу. Обычно это не будет проблемой, потому что он помещает их в пространство имен, к которому вы не будете добавлять вещи, std.

Ваша проблема возникает из этой маленькой строки

using namespace std;

Это вытягивает все из std в пространство имен вашей программы, включая std::random, что любезно предоставили авторы компилятора. Если вы вместо этого явно объявите, что вы извлекаете из std, вы бы не засорили свой локальный random с помощью std::random:

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

См. Также этот вопрос из справки по c ++ FAQ.

...