Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
OrmaJever
9 / 9 / 0
Регистрация: 10.11.2011
Сообщений: 241
#1

*_cast< тип >( выражение ) - C++

23.04.2012, 01:24. Просмотров 667. Ответов 4
Метки нет (Все метки)

В чём отличие static_cast, dynamic_cast, reinterpret_cast, const_cast от преобразования типа в скобках (стиль Си вроде)
C++
1
2
float f = 10.9;
int i = (int)f;
Читал что этот вариант пришёл из Си, а в C++ предусмотрены 4 функции, но в чём отличие-то? Помоему и Си стиль корректно переводит.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.04.2012, 01:24
Здравствуйте! Я подобрал для вас темы с ответами на вопрос *_cast< тип >( выражение ) (C++):

Как сделать *_cast указателя shared_ptr<T>? - C++
Хочу определять тип (например через dynamic_cast) указателя shared_ptr. (криво звучит но по другому выразить не могу) Есть несколько...

Вычислить выражение, используя тип double - C++
Помогите решить простую задачу, сам только учусь. a^4+b^4–a^4\(6*a^2*b^2)+(4*a*b^3)+b^4+(4*a^3*b) а=10, b=0.01 Нужен тип double...

Выражение должно иметь тип класса. Да ну? - C++
перекопал весь форум, ни где не нашел решение моей проблемы. #include &lt;GL/glut.h&gt; #include &lt;Windows.h&gt; #include &lt;iostream&gt; ...

Выражение должно иметь тип указателя - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; struct laiks { int h; int m; int s; ...

Выражение должно иметь тип указателя на объект - C++
Не могу понять где я ошибся, на j ругается. // lalaba3.cpp: определяет точку входа для консольного приложения. // #include...

Выражение должно иметь тип класса, как исправить? - C++
Ошибку выдает в строчке кода bool kill (Rplane x, Uplane y){ if(x.set &lt; y.set) return false; else return true; }

4
panicwassano
592 / 560 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
23.04.2012, 01:26 #2
Страуструп пишет, что они опасны, и лучше пользоваться приведением типов в стиле Си
но вы описали только первую.
dynamic_cast преобразование во время выполнения
reinterpret преобразование между несовместимыми типами
const_cast снятие с константы модификатора const
0
PointsEqual
ниначмуроФ
837 / 521 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
23.04.2012, 11:50 #3
Цитата Сообщение от panicwassano Посмотреть сообщение
Страуструп пишет, что они опасны, и лучше пользоваться приведением типов в стиле Си
он пишет наоборот - приведение в стиле С опаснее, тк сложнее отслеживать вид преобразования)


dynamic_cast - определяет, принадлежит ли объект некоторого типа некоторой иерархии
reinterpret_cast - нужен для низкоуровневых приведений (преобразования не родственных типов)
static_cast - нужен для явных приведений типов (преобразования родственных типов)
const_cast - нужен для снятия константности объекта
1
diagon
Higher
1932 / 1198 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
23.04.2012, 12:00 #4
По словам Страуструпа, static_cast<...> специально так уродливо выглядит, чтобы его легко можно было заметить в коде, т.к. с кастами связано довольно много трудноуловимых ошибок.
0
PointsEqual
ниначмуроФ
837 / 521 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
23.04.2012, 12:05 #5
Цитата Сообщение от OrmaJever Посмотреть сообщение
Читал что этот вариант пришёл из Си, а в C++ предусмотрены 4 функции, но в чём отличие-то?
Мэйерс:
1) гораздо легче найти в коде
2) более узко специализированное назначение каждого оператора дает возможность компиляторам дигностировать ошибки их использования
0
23.04.2012, 12:05
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.04.2012, 12:05
Привет! Вот еще темы с ответами:

Vector size - выражение должно иметь тип указателя - C++
vector &lt;planet_Struct&gt; planet_map; int ywf = planet_map-&gt;size int ywf = planet_map-&gt;size; Подчеркивает красным planet_map и говорит,...

Выражение должно иметь тип класса в Visual Studio - C++
Здравствуйте! Около года назад прорешивали с братом возможные задания на экзамен (он учился на курс старше меня), а мне сейчас выпала...

Ошибка выражение должно иметь тип указателя на объект - C++
Как устранить проблему? #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;stdlib.h&gt; #include &lt;stdio.h&gt; #include...

Работа с текстами/строки. Error: выражение должно иметь тип класса - C++
Есть код #include &quot;stdio.h&quot; #include &quot;stdafx.h&quot; #include &quot;stdlib.h&quot; #include &lt;string.h&gt; #include &quot;iostream&quot; #include...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.