Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
septe-mber
0 / 0 / 1
Регистрация: 02.01.2013
Сообщений: 123
1

Чем отличается static_cast от приведения в стиле Си?

12.06.2013, 17:55. Просмотров 761. Ответов 14
Метки нет (Все метки)

Привет всем!
чем отличаются явное приведения типа
C++
1
long tmp = static_cast<long>(45.6);
от
C++
1
long tmp = long(54.34);
?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.06.2013, 17:55
Ответы с готовыми решениями:

Отличие static_cast от приведения в стиле С
Собственно вопрос в заголовке. Говорят что Static_cast безопасней чем...

Чем отличаются dynamic_cast и static_cast?
если можно пример напишите

В чем разница между Си'шным приведением типа и унарной шаблонной функцией static_cast?
В чем разница между Си'шным приведением типа: ... int x{5}; ifs.write(...

Чем отличается if от (?:)
Здравствуйте. Почитываю С++, сам программирую в Делфи. Вот немного запутался. В...

Чем отличается this от *this?
Привет всем ! вот код template&lt;typename Key, typename Value&gt; Dictionary&lt;Key,...

14
Кудаив
410 / 409 / 72
Регистрация: 27.05.2012
Сообщений: 1,168
Завершенные тесты: 2
12.06.2013, 17:58 2
static_cast - безопасное приведение типа, поищи блог Алёны С++ - она здорово про приведения типов рассказывает
1
Issues
430 / 365 / 149
Регистрация: 06.08.2012
Сообщений: 961
12.06.2013, 18:07 3
http://alenacpp.blogspot.com/2005/08/c.html
1
MrGluck
Модератор
Эксперт CЭксперт С++
8087 / 4940 / 1431
Регистрация: 29.11.2010
Сообщений: 13,398
12.06.2013, 18:09 4
Сверху С++ стайл, более безопасная формула и в глаза бросается
Снизу С стайл, в С++ лишь по наследству оставили.
1
Croessmah
12.06.2013, 18:20
  #5

Не по теме:

Цитата Сообщение от septe-mber Посмотреть сообщение
C++
1
long tmp = long(54.34);
может имелось ввиду
C++
1
long tmp = (long)54.34;

0
Кудаив
410 / 409 / 72
Регистрация: 27.05.2012
Сообщений: 1,168
Завершенные тесты: 2
12.06.2013, 18:33 6
Croessmah, никакой разницы
0
MrGluck
Модератор
Эксперт CЭксперт С++
8087 / 4940 / 1431
Регистрация: 29.11.2010
Сообщений: 13,398
12.06.2013, 18:39 7
Кудаив, ну это как посмотреть. В данном контексте да, а вообще-то, в одном случае вызов конструктора, а во втором приведение типа.
0
Кудаив
410 / 409 / 72
Регистрация: 27.05.2012
Сообщений: 1,168
Завершенные тесты: 2
12.06.2013, 18:47 8
MrGluck, для встроенных типов никакой разницы, кроме указателей
0
MrGluck
Модератор
Эксперт CЭксперт С++
8087 / 4940 / 1431
Регистрация: 29.11.2010
Сообщений: 13,398
12.06.2013, 18:50 9
Кудаив, и как это противоречит с
Цитата Сообщение от MrGluck Посмотреть сообщение
В данном контексте да, а вообще-то,
?
0
Кудаив
410 / 409 / 72
Регистрация: 27.05.2012
Сообщений: 1,168
Завершенные тесты: 2
12.06.2013, 18:52 10
MrGluck, нет, никак
0
BAADF00D
Заблокирован
12.06.2013, 18:54 11
Цитата Сообщение от septe-mber Посмотреть сообщение
чем отличаются явное приведения типа
кастование необходимо для приведения типов - классов. Для встроенных же типов не стоит заморачиваться и можно применить второй вариант.
0
MrGluck
Модератор
Эксперт CЭксперт С++
8087 / 4940 / 1431
Регистрация: 29.11.2010
Сообщений: 13,398
12.06.2013, 19:14 12
BAADF00D, нет, не стоит. Код должен быть написан в едином стиле и первая конструкция явно бросается в глаза, а вторую можно даже не заметить.

Это мб и дело вкуса, на функциональность программы не повлияет.
0
rangerx
1942 / 1551 / 478
Регистрация: 31.05.2009
Сообщений: 2,913
12.06.2013, 19:34 13
septe-mber,
Первый вариант - приведение типа, второй - конструирование переменной. Смысл второго варианта заключается в создании единообразного интерфейса для инициализации как пользовательских, так и встроенных типов, это полезно при использовании списков инициализвации, шаблонов и т.д.

Добавлено через 40 секунд
Цитата Сообщение от MrGluck Посмотреть сообщение
Снизу С стайл, в С++ лишь по наследству оставили.
В C это работать не будет
0
Убежденный
Ушел с форума
Эксперт С++
15999 / 7270 / 1180
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
12.06.2013, 20:08 14
static_cast хорош тем, что если код меняется (а он меняется, рано или поздно) и типы,
участвующие в приведении, становятся несовместимыми, форсируется ошибка компиляции.
Это дает понять программисту, который вносит изменения в код, что он где-то накосячил.

Приведение в стиле С, напротив, спокойно "поглотит" проблемное место, в результате чего
ошибка всплывет только во время работы программы. Как водится, это произойдет не сразу, а
спустя некоторое время, скорее всего во время важной презентации софта, на глазах заказчика
2
MrGluck
Модератор
Эксперт CЭксперт С++
8087 / 4940 / 1431
Регистрация: 29.11.2010
Сообщений: 13,398
12.06.2013, 20:14 15
rangerx, да я неправильно прочел, думал там
C
1
long tmp = (long)54.34;
0
12.06.2013, 20:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.06.2013, 20:14

Чем C++ отличается от C++ Builder?
Чем C++ отличается от C++ Builder? И если имеется желание писать именно в...

Чем отличается С++ от Visual С++?
Здравствуете товарищи программисты! Только начал изучать язык программирования...

Чем new отличается от malloc?
Чем new отличается от malloc?


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

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

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