Wchar t c что это
Перейти к содержимому

Wchar t c что это

  • автор:

Не конструируется std::istream_iterator для wchar_t | C++

И компилятор ругается, что я не могу создать итератор для std::wifstream . Хотя у std::wifstream char_type — это wchar_t, и для итератора я указал wchar_t. Что не так я делаю?

Отслеживать
задан 19 фев 2022 в 14:52
ComeInRage ComeInRage
1,590 6 6 серебряных знаков 14 14 бронзовых знаков

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

Дело в том, что первый аргумент шаблона istream_iterator и ostream_iterator — это тип, который будет извлекаться из потока, т.е. это может быть int , double или любой другой тип. А вот второй аргумент — это уже тип символов самого потока. Это может быть char или wchar_t и т.п. Значит итераторы нужно обьявлять так:

using in_it = std::istream_iterator; using out_it = std::ostream_iterator; 

Отслеживать
ответ дан 19 фев 2022 в 15:08
user361068 user361068

Спасибо, задам смежный вопрос. Почему код выше (с учетом правок для wchar_t) в выходном файле все пишет в одну строку, хотя в исходном есть переносы строк

19 фев 2022 в 15:30

@ComeInRage Вроде и пробелы должен пропускать тоже. Извлечение данных из потока происходит также как и при использовании оператора >> . А значит пропускает все пробельные символы, в том числе и перевод строки.

– user361068
19 фев 2022 в 15:42
Понял, спасибо. Буду крайне признателен, если подскажете способ не пропускать спецсимволы и пробелы)
19 фев 2022 в 15:48
@ComeInRage Попробуйте использовать istreambuf_iterator вместо istream_iterator
– user361068
19 фев 2022 в 15:55

Это как раз то, что нужно. Спасибо. Только никак не могу понять в чем разница между stream и streambuf. В документации написано, что stream реализованы с помощью streambuf. То есть все stream — это обертки вокруг streambuf, а сам streambuf — это обертка вокруг хранилища с данными файла? :/

Для чего нужен тип `wchar_t`?

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

В настоящее время стандарт C++ поддерживает следующие типы для представления знаков наборам символов, включая расширенные наборы, как, например, символы UNICODE:

char, char16_t, char32_t, wchar_t 

Пример использования «широкого» строкового литерала

#include int main()

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *