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

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

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Р,где...


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

В теории государства и права выделяют два пути возникновения государства: восточный и западный Восточный путь возникновения государства представляет собой плавный переход, перерастание первобытного общества в государство...

Закон Гука при растяжении и сжатии   Напряжения и деформации при растяжении и сжатии связаны между собой зависимостью, которая называется законом Гука, по имени установившего этот закон английского физика Роберта Гука в 1678 году...

Характерные черты официально-делового стиля Наиболее характерными чертами официально-делового стиля являются: • лаконичность...

Задержки и неисправности пистолета Макарова 1.Что может произойти при стрельбе из пистолета, если загрязнятся пазы на рамке...

Вопрос. Отличие деятельности человека от поведения животных главные отличия деятельности человека от активности животных сводятся к следующему: 1...

Расчет концентрации титрованных растворов с помощью поправочного коэффициента При выполнении серийных анализов ГОСТ или ведомственная инструкция обычно предусматривают применение раствора заданной концентрации или заданного титра...

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