Вызывает ли cout / cin внутренний вызов printf () / scanf (), как `new` вызывает mallo c? - PullRequest
0 голосов
/ 11 июля 2020

Я просмотрел его через Inte rnet. Я нашел много ответов, сравнивая cin vs scanf() и cout vs printf(), но так и не нашел, если cin действительно использует scanf() внутри, как new, оператор в C ++ использует malloc() функцию C.

Ответы [ 2 ]

6 голосов
/ 11 июля 2020

Стандарт C ++ не определяет, как реализованы средства стандартной библиотеки, такие как std::cin и std::cout, а только как они должны себя вести. Вызывают ли функции ввода-вывода C ++ свои C аналоги, зависит от реализации.

В качестве примера того, как могут быть реализованы потоки ввода-вывода C ++, мы можем взглянуть на исходный код libstdc ++, это реализация стандартной библиотеки G CC. Функция std::basic_istream& operator>>(int&), которая вызывается, когда вы используете std::cin >> x для чтения int, вызывает некоторые функции, которые вызывают другие функции, и в конечном итоге достигает этой функции _M_extract_int, которая фактически анализирует целое число. Следовательно, libstdc ++ не реализует оператор извлечения потока для целых чисел, использующих C функции ввода-вывода. Тем не менее, помните, что это только один пример, и реализации других стандартных библиотек могут отличаться.

3 голосов
/ 11 июля 2020

Стандарт C ++ определяет, что должны делать объекты std::cout и std::cin. Как это реализовано, зависит от производителя.

Лучший способ убедиться - это прочитать исходный код данной реализации.

Вам также необходимо знать, что под капотом printf() использует также другие функции. Было бы разумно реализовать с ними cout, поскольку этот объект не работает точно так же, как функция printf().

Существует также небольшая вероятность того, что std::cin использует scanf(), c (подробнее см. Руководство для новичков от scanf()).

...