Главная » Просмотр файлов » Б. Страуструп - Язык программирования С++. Специальное издание, 3-изд. Бином. 2004

Б. Страуструп - Язык программирования С++. Специальное издание, 3-изд. Бином. 2004 (1160791), страница 217

Файл №1160791 Б. Страуструп - Язык программирования С++. Специальное издание, 3-изд. Бином. 2004 (Б. Страуструп - Язык программирования С++. Специальное издание, 3-изд. Бином. 2004) 217 страницаБ. Страуструп - Язык программирования С++. Специальное издание, 3-изд. Бином. 2004 (1160791) страница 2172019-09-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 217)

Строки имен либо определены в среде исполнения программы, либо собираются из таких имен конструкторами локализаций. Г.2.1.1. Создание новых локализаций Новая локализация создается из сущес ~ вующей посредс1вом добавления к ней или замены в ней фасетов. Как правило, новая локализация лишь немного видоизменяет существующую. Например: оо(й/(сопз((оса(ей !ос, сопл(Му топеу (о* т(о) //Му топей (о определена у Г43.1 ( !оса(е !ос(((оса(е('РОЯ/Х"),!ос, !оса(е.липпе(агу) // использование денежных // фасетов из (ос (оса1е 1ос2 = 1оса(е((оса(езс(азз(с), т(о); // классика плюс т(о 0- ) В нашем примере (ос1 является модифицированной копией локализации Р0$П, использующейденежныефасеты из1осЯ ГАЗ).

Аналогично, 1ос2является модификацией Локализации с одинаковыми и отличнымн от значения по умолчанию з!г(пу("*") строками имен полагаются совпадающими. Однако операторы = и!= обеспечивают более непосредственный способ сравнения локализаций. Копия локализации, имеющей строку (висни, получает то же самое имя, позтому у нескольких локализаций имена могут совпадать.

Это разумно, потому что локализации пеизменяемы и все копии определяют один и тот же набор национальных особенностей. Бызов 1оса(в(1ос, "(соо", са() создает локализацию, подобну|о 1ос, затем исключением, что новая локализация берет фасеты категории са( из 1оса1е("(соо"). У новой локализации есть строка имени в том и только в том случае, если таковая имеется у 1ос. Стандарт не определяет, какую конкретно строку имени получит новая локализация, но предполагается, что новая строка будет отличаться от строки, соответствующей 1ос.

Одно из очевидных решений — сборка нового имени из строки имени 1ос, плюс "Роо". Например, если строкой имени 1ос является еп (/К, новая локализация могла бы получить строку имени "еп ((Капов". Сведения о строках имев вновь созданных локализаций можно обобщить следующим образом: Приложение Г Локализация локализации С, использующей Му топеу (о Я Г.4.3.1). Если аргумент Гасе!* (в пашем случае, Му топеу ю) равен У, новая локализация булет просто копией аргумента!оса!е.

В записи 1оса!е(сопя1 !оса!ей к, Гасе!'Я аргумент/'должен идентифицировать конкретный тип фасета. Просто Гасе!* недо- стато*шо/Например: оои1 у(сопя! !оса!е /асе1* тсо1, сопи! Му топеу кп т1о2) ( !оса1е!осЗ = !оса!е(!оса!езс1аяя!с(), т/о!); // ошибка: не известен тип фасета 1оса1е 1ос4 =!оса!в(1оса1езс1аяягс(), тго2); // правильно; тип фасета известен 0-. ) Причина в том, что 1оса1е использует тип аргумента Гасе!* для определения типа фасета на этапе компиляции. Именно, реализация локализации применяет идентификатор типа фасета~асе1с!!1 Я ГЗ) для поиска фасета в локализации Ц Г.З.(). Обратите внимание, что конструктор 1етр!а1е кс1аяя Гасе1ь!оса1е(сопя1 !оса!ей х, Гасе!'/); является единственным механизмом языка, предоставляющим программисту возможность задания фасета, который будет использоваться в локализации.

Ряд локализаций предоставляются реализациями в виде именованных локализаций Я Г.2.1). Эти именованные локализации можно извлечь из среды исполнения программы. Программист, понимающий механизмы извлечения, присущие конкретной реализации, может добавляты аким способом новые локализации (5 Г.б(11,(21), Набор конструкторов локализации спроектирован таким образом, чтобы тип каждого фасета становился известен либо путем выведения типа (из параметра Гасе!- шаблона), либо благодаря тому, что фасет получен из другой локализации (которая знает его тип).

Задание аргумента са1еуогу косвенно определяет тип фасета, потому что локализация знает тип фасетов в категориях. Это подразумевает, что класс 1оса1е может (и должен) отслеживать тины фасетов, что позволяет манипулировать ими с минимальными накладными расходами. Для определения типов фасетов локализации используют тип-член 1оса1есЫ Я Г.З). Иногда полезно создать локализацию, являющуюся копией существующей, за исключением того, что некоторые ее фасеты взяты из третьей. Это реализуется шаблонной функцией-членом сотЬ|пе(). Рассмотрим пример: ооЫ/(сопя!!оса!ей 1ос, сопя1 !оса!ес !ос2~ ( 1осаге!осЗ = 1ос.сотЬ1пекМу топеу !о>~1ос2~! // -. ) Новая 1осЗ ведет себя подобно 1ос, но использует копию Му топеу го (з Г.4.3.1) из 1ос2 для форматирования ввода/вывода денежных единиц.

Если в 1ос2 нет Му топеу !о для передачи новой локализации, сотЬ/пе() сгенерирует исключение гип11те еггог Я 14.Н)). Результат согпЬ/пе() не имеет строки имени. 957 Е2. Класс!оса!е Г.2.2. Копирование и сравнение локализаций Локализацию можно скопировать инициализацией и присваиванием. Например: //как и я(я(кяшар!) сои( яшар((оса(ей х, (оса!ей у) ( 1оса!е 1етр = х; х= у, у = 1етр; Копия локализации успешно проверяется па равенство оригиналу, но копия является независимым и отдельным объектом.

Например: ооЫ/((оса(е* ту (оса(е) ( (оса(е!ос = (оса(есс(аяя(с~, //локализация С" (/((ос!= 1оса(еяс(аяя(с())( сегг « 'ошибка реализации: сообщите поставщику'~п', ех(1(() ) у(й!ос!= й!оса!еяс!аяя(с()) сои! « "ничего удивительного — адреса отличаютсл~п"; 1оса1е (ос2 = 1оса1е((ос, ту 1оса(е, (оса1еспитслс); ((((ос == (осг) ( сои1 « "мои числовые грасеты те ясе, что и у с(аяя!с()~п' О-. Если в локализацию ту 1оса1е имеется отвечающий за пунктуацию чисел фасет ту питрипс(<сйаг>, отличающийся от стандартного питрипс1<сйаг из с1аяя/с(), то полученные локализации можно изобразить слсдующим образом; со1!а(е<сйаг> (осг 1ос сотраге() йаяй() рипс1<сйаг> с(ес(та1ро(п1() сигг яутбо!() питрипс(<сйагьк ((ес(та( ро(п1() сиге яутЬо(() Приложение Г Локализация 958 Не сушествует способа модификации 1оса1е.

Но операции над локализациями позволяют создавать новыс локализации из существующих, Тот факт, что локализация неизменяема после ее создания, является существенным для обеспечения эффективности на этапе исполнения. Это позволяет пользователю локализации вызывать виртуальные функции фасетов и кэшировать возвращаемые значения. Например, !з/геат может знать, какой символ используется для представления десятичной точки, и как представляется значение 1гие, не вызывая Нес!та1 ро!п(() каждый раз при чтении числа и 1 иепате() каждыи раз при чтении логической переменной (9 ГА.2).

Действительно, значения, возвращаемые подобными вызовами, могут измениться лишь при вызове (тбие() для потока (9 21.6,3). Г.2.3. Локализации а!оЬа1() и с1ааа)с() Понятие текущей локализации программы обеспечивается функциями 1оса1е(), возвращающей копию текущей локализации, и 1оса1езйс1оба/(х), устанавливающей локализацию х в качестве текущей. Текущую локализацию обычно называют еглобаль ной локализацией», отражая этим названием ее вероятную реализацию глобальным (или статическим) объектом.

Глобальная локализация неявно используется при инициализации потока. То есть каждому новому позоку придается (!тбие, 8 2!.1, 8 21.6З) копия 1оса1е(). При запуске, глобальной локализацией является стандартная локализация С, 1оса1езс1азз!с(). Статическая функция-член 1оса/ези(оба1() позволяет программисту задавать глобальную локализацию. Возвращает же о1оЬа1() копию предыдущей глобальной локализации, что обеспечивает возможность восстановить прежнюю глобальную локализацию.

Например: оо1г/Ясопз! 1оса1ез ту 1ос) !/з!гептила!(зоте пате); // за йп! закрепляется глобальная // локализация // устанавливается новая // глобальная локалщзация // за/1п2 закрепляется во кол ссзацсся //спу 1ос 1оса1ей о!с! у!оба!=!оса1е, у!оба!(ту 1ос); 1/з!геагп/1п2(соте о!Ьег пате), // -. !оса!сну!оьа1(о!г! у/оЬа!); // восстановление нрсдидущей // глобальной локализации Если в локализации х имеется строка имени, 1оса1елЬг1оЬа1(х) также устанавливает глобальную локализацию С. Имеется в виду, что если программа на С »+ вызывает функцию из стандартной библиотеки С, зависящую от локализации, то работа с локализацией будет согласованна в смешанной С/С++ программе. В том случае, когда локализация х не имеет строки имени, не определено, влияет ли 1оса1езй2оба1(х) на глобальную локализацию С.

Подразумевается, что программа на С+.ь нс может надежным и переносимым способом задать в качестве локализации С такую локализацию, которая нс была получена из среды исполнения. Не существует стандартного способа, которым программа на С могла бы установить глобальную ГЗ. Фасеты локализаций локализацию С++ (кроме как вызвать для этого функцию на Сн-+). В смешанной С/ С++ программе наличие глобальной локализации С, отличаюгцейся от у!оЬа!(), провоцирует ошибки, Задание глобальной локализации пе влияет на существующие потоки ввода/вывода; онн по прежнему используют локализации, закрепленные за ними до изменения глобальной локализации. Например, /)л! остался неизменной в результате действий с глобальной локализацией, приведших к закреплению заЯл2 локализации ту !ос. Изменение глобальной локализации страдает теми же недостатками, что и любые другие технологии, использующие изменение глобальных данных: по сути невозможно узнать, на что влияют изменения.

Поэтому лучше свести использование сс!оЬа!() к минимуму и сосредото гить эти изменения в нескольких разделах кода, подчиняющихся простой стратегии подобных изменений. Дело упрощается благодаря возможности закрепить конкретные локализации за отдельным потоками Я 21.6.3). Однако изобилие разбросанных по программе явных ссылок на локализации и фассты также приведет к трудностям сопровождения. Г.2.4. Сравнение строк Сравнение двух строк в соответствии с конкретной локализацией является, вероятно, наиболее типичным явнылс использованием !оса!е, поэтому эта операция предоставляется непосредственно локализацией, чтобы пользователям нс пришлось создавать своих собственных функций сравпсння пз фасета со!!а1е 1у Г.4,1), Функция сравнения определена как орега1ог()() локализации, так что се можно непосредственно применять как преднкат Я 18А.2).

Характеристики

Тип файла
DJVU-файл
Размер
10,02 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6375
Авторов
на СтудИзбе
309
Средний доход
с одного платного файла
Обучение Подробнее