Подтвердить что ты не робот

Какая цель imbue в С++?

Сегодня я работаю с некоторым кодом, и я увидел:

extern std::locale g_classicLocale;
class StringStream : public virtual std::ostringstream
{
 public:
        StringStream() { imbue(g_classicLocale); }
        virtual ~StringStream() {};
};

Затем я столкнулся с imbue. Какова цель функции imbue в С++? Что оно делает? Существуют ли какие-либо потенциальные проблемы при использовании imbue (без потоковой безопасности, выделения памяти)?

4b9b3361

Ответ 1

imbue наследуется std::ostringstream от std::ios_base и устанавливает локаль поток в указанную локаль.

Это влияет на то, как поток печатает (и читает) определенные вещи; например, установка французского языка приведет к замене десятичной точки . на ,.

Ответ 2

Потоки С++ выполняют свои преобразования в и из (числовых) типов в соответствии с locale, который представляет собой объект, который суммирует всю необходимую информацию о локализации (десятичный разделитель, формат даты,...).

По умолчанию для потоков используется текущая глобальная локаль, но вы можете установить для потока пользовательский языковой стандарт с помощью функции imbue, что и делает ваш код здесь - я полагаю, он установил локаль C по умолчанию для создания текущий языковой независимый текст (это полезно, например, для целей сериализации).