Почему случайный () работает в CSTDLIB? (Ubuntu 10.10)
-
09-10-2019 - |
Вопрос
Я всегда думал, что случайные функции в CSTDLIB были только Rand и Srand, но следующие работы (скомпилированные с G ++ на Ubuntu 10.10)?
Я на самом деле обнаружил это при переходе из Windows в Ubuntu, моя компиляция не удалась, так как она была неоднозначно перегрузкой (я объявил мою собственную «случайную ()» функцию).
#include <cstdlib>
#include <iostream>
using namespace std;
int main() {
srandom(50);
cout << random();
return 0;
};
Также на Ubuntu правильно следующие компилирования, оно появляется после проверки STDLIB.h, что случайное () и Srandom (), среди прочего, не объявляются в пространстве имен STD. Что делает его полной болью в заднице ...
#include <iostream>
#include <cstdlib>
int main() {
std::cout << random();
return 0;
};
Решение
Поскольку авторы для компилятора могут свободно добавлять дополнительные вещи в языковую библиотеку, чтобы облегчить вашу работу. Обычно это не было бы проблемой, потому что она ставит их в пространство имен, которое вы не будете добавлять вещи, std
.
Ваша проблема возникает из этой маленькой линии
using namespace std;
Это тянет все от std
в пространство имен вашей программы, в том числе std::random
, который восполщители компилятора полезно предоставили. Если вы вместо этого явно заявляете, что вы тянете из std
, вы бы не будете сбивать твой местные random
с std::random
:
using std::rand;
using std::srand;
Смотрите также этот вопрос от FAQ C ++ Lite.
Другие советы
random()
является частью Одиночная спецификация Unix. Отказ Это не часть стандарта C ++. Вот почему это не в Windows, но находится на большинстве Unix / Mac платформ.