Ответ 1
get
и getline
весьма схожи, когда get
вызывается с параметрами ( char_type* s, std::streamsize count )
. Однако get
читается из потока до тех пор, пока не будет найден разделитель, а затем оставит его там. getline
сравним, вытащите разделитель из потока, но затем отбросьте его. Он не будет добавлен в буфер, который он заполняет.
get
ищет \n
, и когда в аргументе указано определенное количество символов (например, count
), перед остановкой он будет читать символы count - 1
. read
будет вытягивать все count
из них.
Вы могли бы предусмотреть read
как подходящее действие для двоичного источника данных, считывая определенное количество байтов. get
будет более уместным в текстовом потоке, когда вы читаете строку, которую хотите прекратить с нулевым символом, и где такие вещи, как символы новой строки, имеют полезные синтаксические значения, разделяющие текст.
readsome
возвращает только символы, которые сразу доступны в базовом буфере, что немного туманно и специфично для реализации. Это, вероятно, включает в себя символы, возвращенные в поток, используя putback
, например. Тот факт, что вы не видите разницы между read
и readsome
, просто показывает, что они могут совместно использовать реализацию для конкретного типа потока и библиотеки, которую вы используете.