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



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

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

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

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

ПРОФЕССИОНАЛЬНОЕ САМОВОСПИТАНИЕ И САМООБРАЗОВАНИЕ ПЕДАГОГА Воспитывать сегодня подрастающее поколение на со­временном уровне требований общества нельзя без по­стоянного обновления и обогащения своего профессио­нального педагогического потенциала...

Эффективность управления. Общие понятия о сущности и критериях эффективности. Эффективность управления – это экономическая категория, отражающая вклад управленческой деятельности в конечный результат работы организации...

Мотивационная сфера личности, ее структура. Потребности и мотивы. Потребности и мотивы, их роль в организации деятельности...

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

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

Именные части речи, их общие и отличительные признаки Именные части речи в русском языке — это имя существительное, имя прилагательное, имя числительное, местоимение...

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