Студопедия — R.5.4 Явное преобразование типа
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

R.5.4 Явное преобразование типа






Явное преобразование типа можно задать с помощью функциональнойзаписи ($$R.5.2.3) или с помощью операции приведения. выражение-приведения: унарное-выражение (имя-типа) выражение-приведения Задание с помощью операции приведения используется для обозначенияпреобразования к типу, который не является конструкциейимя-простого-типа. В операции приведения нельзя определять типы. Всякое преобразование типа, не упомянутое здесь и не являющеесяпреобразованием явно определенным пользователем ($$R.12.3), считаетсяошибкой. Любой тип, который можно преобразовать в другой с помощьюстандартного преобразования ($$R.4), можно также преобразоватьс помощью явного преобразования (приведения) и смысл преобразованиябудет тот же. Указатель можно преобразовать к любому целочисленному типу,достаточно большому, чтобы вместить значение указателя. Алгоритмпреобразования зависит от реализации, но предполагается, что онбудет естественным для того, кто знает систему адресации, используемоймашины. Значение целочисленного типа может быть явно преобразовано вуказатель. Указатель, преобразованный в целое достаточного размера(если такие есть в реализации), и преобразованный обратно к типууказателя, должен иметь свое первоначальное значение. Все другиедетали перевода указателя в целое и обратно зависят от реализации. Указатель на объект одного типа может быть преобразован вуказатель на объект другого типа (с соблюдением ограничений, указанныхздесь). Использование получившегося указателя может вызватьособую адресную ситуацию ("неверный адрес"), если преобразуемыйуказатель ненастроен на объект, правильным образом выравненный в памяти.Гарантируется, что указатель на объект данного размера можнопреобразовать в указатель на объект равного или меньшего размераи провести обратное преобразование без изменения значения указателя.На различных машинах двоичное представление указателей может бытьразлично как и требования на выравнивания объектов. Составныеобъекты выравниваются по самой строгой границе, требуемой ихсоставляющими. Указатель типа void* считается совместимым суказателем на объект любого типа. Указатель на класс B можно преобразовать в указатель на класс D,для которого класс B является прямо или опосредованно базовымклассом, если существует однозначное преобразование из D в B($$R.4.6, $$.R10.1.1) и если B является виртуальным базовым классом($$R.10.1). Такое приведение от базового класса к производномуклассу предполагает, что объект базового класса является вложеннымпо отношению к объекту производного класса. В результате получитсяуказатель, настроенный на объемлющий объект производного класса.Если объект базового класса не содержится ни в каком объектепроизводного класса, такая операция приведения может вызватьособую ситуацию. Пустой указатель (0) преобразуется сам в себя. Пока еще неопределенный класс можно использовать в операцииприведения указателя, в этом случае никаких допущений о структурекласса не делается ($$R.10.1). Любой объект можно явно преобразовать к типу ссылки X&, еслиуказатель на этот объект можно явно преобразовать в тип X*.В результате приведения к ссылке не происходит вызовов конструкторовили функций преобразований. Преобразование ссылки на базовый классв ссылку на производный класс рассматривается аналогичнопреобразованию указателя на базовый класс в указатель напроизводный класс, учитывая вопросы однозначности, виртуальныхклассов и т.д. Результатом приведения к ссылке является адрес, в отличие от всехостальных приведений. Результат приведения указателя или ссылкинастроен на тот же объект, что и исходное выражение без операцииприведения. Указатель на функцию можно явно преобразовать в указатель нанекоторый объект при условии, что тип указателя на этот объектдостаточно велик, чтобы хранить указатель на функцию. Указательна некоторый объект можно явно преобразовать в указатель на функциюпри условии, что тип указателя на функцию достаточно велик, чтобыхранить указатель на этот объект. В обоих случаях, использованиеуказателя, получившегося в результате преобразования, можетвызвать особую адресную ситуацию, или что-нибудь похуже,если исходный указатель не настроен на соответствующий объект. Указатель на функцию одного типа можно явно преобразовать вуказатель на функцию другого типа. Результат вызова функции спомощью указателя на функцию, тип которой отличен от типа,использованного при определении первой функции, неопределен(см. так же $$R.4.6). Объект или значение можно преобразовать в объект типа класстолько при условии, что определен подходящий конструктор илиоперация преобразования ($$R.12.3). Указатель на член можно явно преобразовать в указатель на другойчлен, если оба участвующих типа являются типами указателейна члены одного класса, или, если оба типа являются указателямина функцию-член классов, один из которых получается как однозначноепроизводное от другого ($$R.4.8). Указатель на объект с типом, имеющим спецификацию const, можнопривести к указателю с типом без спецификации const. Получившийсяв результате указатель будет настроен на исходный объект.Объект с типом, имеющим спецификацию const, или ссылку на объекттакого типа можно привести в ссылку на объект с типом без const.Получившаяся в результате ссылка будет настроена на исходныйобъект. В результате попытки изменить этот объект с помощьютакой ссылки или указателя может возникнуть особая ситуация илион будет таким же, как при обращении с помощью исходной ссылкиили указателя к объекту, тип которого не содержит const. Возникнетли особая адресная ситуация зависит от реализации. Указатель на объект типа со спецификацией volatile можно привестик указателю на объект типа без volatile. В результате получитсяуказатель, настроенный на исходный объект. Объект типа с volatileили ссылку на такой объект можно привести к ссылке на объект с типомбез volatile.







Дата добавления: 2015-09-04; просмотров: 353. Нарушение авторских прав; Мы поможем в написании вашей работы!



Функция спроса населения на данный товар Функция спроса населения на данный товар: Qd=7-Р. Функция предложения: Qs= -5+2Р,где...

Аальтернативная стоимость. Кривая производственных возможностей В экономике Буридании есть 100 ед. труда с производительностью 4 м ткани или 2 кг мяса...

Вычисление основной дактилоскопической формулы Вычислением основной дактоформулы обычно занимается следователь. Для этого все десять пальцев разбиваются на пять пар...

Расчетные и графические задания Равновесный объем - это объем, определяемый равенством спроса и предложения...

Классификация холодных блюд и закусок. Урок №2 Тема: Холодные блюда и закуски. Значение холодных блюд и закусок. Классификация холодных блюд и закусок. Кулинарная обработка продуктов...

ТЕРМОДИНАМИКА БИОЛОГИЧЕСКИХ СИСТЕМ. 1. Особенности термодинамического метода изучения биологических систем. Основные понятия термодинамики. Термодинамикой называется раздел физики...

Травматическая окклюзия и ее клинические признаки При пародонтите и парадонтозе резистентность тканей пародонта падает...

Функциональные обязанности медсестры отделения реанимации · Медсестра отделения реанимации обязана осуществлять лечебно-профилактический и гигиенический уход за пациентами...

Определение трудоемкости работ и затрат машинного времени На основании ведомости объемов работ по объекту и норм времени ГЭСН составляется ведомость подсчёта трудоёмкости, затрат машинного времени, потребности в конструкциях, изделиях и материалах (табл...

Гидравлический расчёт трубопроводов Пример 3.4. Вентиляционная труба d=0,1м (100 мм) имеет длину l=100 м. Определить давление, которое должен развивать вентилятор, если расход воздуха, подаваемый по трубе, . Давление на выходе . Местных сопротивлений по пути не имеется. Температура...

Studopedia.info - Студопедия - 2014-2024 год . (0.01 сек.) русская версия | украинская версия