Как объект cin может принимать разные типы - PullRequest
0 голосов
/ 27 июня 2018

Как объект cin может принимать различные типы, когда он является экземпляром basic_istream<char> или istream? Разве он не должен принимать только char с? или он принимает их только с оператором >>? если он принимает все фундаментальные типы, почему классы basic_istream и его сопутствующие шаблоны?

1 Ответ

0 голосов
/ 27 июня 2018

Класс std::basic_istream<CharT, Traits> моделирует входной поток символов типа CharT. Он обеспечивает как относительно низкоуровневый, так и относительно высокоуровневый доступ к этому входному потоку. Вы можете, например, вызвать std::cin.get(), чтобы получить следующий символ из входного потока; это всегда будет возвращать CharT, так как это основной тип символов в потоке. Однако basic_istream также предоставляет отформатированные входные функции , цель которых состоит в том, чтобы интерпретировать этот поток символов как кодировку некоторого типа, которая потенциально может быть int, std::basic_string<CharT, Traits> или чем-то еще. Таким образом, хотя поток не состоит из int s, существует operator>>, который извлекает значение int путем последовательного считывания цифр из потока char и интерпретации их как представление целого числа с основанием 10. Функция operator>> перегружена, поэтому ее можно использовать для извлечения различных типов.

...