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

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

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; просмотров: 383. Нарушение авторских прав; Мы поможем в написании вашей работы!




Шрифт зодчего Шрифт зодчего состоит из прописных (заглавных), строчных букв и цифр...


Картограммы и картодиаграммы Картограммы и картодиаграммы применяются для изображения географической характеристики изучаемых явлений...


Практические расчеты на срез и смятие При изучении темы обратите внимание на основные расчетные предпосылки и условности расчета...


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

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

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

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

Тема 5. Организационная структура управления гостиницей 1. Виды организационно – управленческих структур. 2. Организационно – управленческая структура современного ТГК...

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

Методы анализа финансово-хозяйственной деятельности предприятия   Содержанием анализа финансово-хозяйственной деятельности предприятия является глубокое и всестороннее изучение экономической информации о функционировании анализируемого субъекта хозяйствования с целью принятия оптимальных управленческих...

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