Особенности национального языка в программном коде [Олег Иванович Цилюрик] (pdf) читать постранично, страница - 14

Книга в формате pdf! Изображения и текст могут не отображаться!


 [Настройки текста]  [Cбросить фильтры]

своими, естественно, соответствующими форматами ("%ls" и "%s").

Детали локализации в C++
Операции со строками
C++, понятно, наследует все возможности C относительно строк, представляемых как массивы
char[] и wchat_t[]. Но C++ вводит новое (и предпочтительнее) объектной представление строк
string и wstring. Большая часть операций со строками, реализующиеся в C функциями API,
реализуются для объектов этих классов функциями-методами, за исключением вот таких важных
особенностей и отличий от строк в стиле C:
1. Строки C++ можно присваивать операцией = (копировать значение);
2. Строки C++ можно сравнивать типовыми операциями: ==, !=, =. Строки
сравниваются в лексографическом порядке. Естественно, что итог сравнения одних и тех же
строк зависит от выбранной локали;
3. Строки можно конкатенировать
соответственно +=);

(объединять)

простым

указанием

операции

+

(и,

4. Существует метод c_str(), возвращающий внутреннее содержимое строки в форме
массива символов (const char*);
Как видно и из последнего утверждения, переменные-объекты класса string/wstring — это
неизменяемые объекты (в том же смысле, как в языке Python и др.). Это не означает константность,
это совсем другое:
string s = "строка 1";
s = "строка 2"

Здесь операцией присвоения переменной s будет присвоен новый объект, созданный вызовом
конструктора с инициализирующим значением "строка 2". Предыдущий объект с значением
"строка 1" будет уничтожен, для него будет вызван деструктор при выходе из области
определения объекта (блока). Новый и старый объекты будут размещены по разным адресам. В
этом смысле и понимается неизменяемость: при модификации значения объекта, новое значение
не изменяет старое, а инициализирует новый объект.
Все эти принципы полностью переносятся и на локализованные строки широких символов
wstring, с той единственной разницей, что string является контейнером однобайтовых char, а
wstring — это контейнер 4-х байтовых широких символов wchar_t.

Потоки ввода-вывода локализованных символов
Библиотеки C++ определяют () отдельные потоки ввода вывода для широких строк,
wcout (эквивалент cout) и wcin (эквивалент cin). Точно так же как и на языке C, прежде чем
осуществлять операции с потоками широких символов, необходимо установить (изменить) локаль
программы:
#include
#include
using namespace std;
void test00(void) {
locale::global(locale(""));
wcout