Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
septe-mber
0 / 0 / 0
Регистрация: 02.01.2013
Сообщений: 123
#1

чем отличаются static_cast от - C++

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

Привет всем!
чем отличаются явное приведения типа
C++
1
long tmp = static_cast<long>(45.6);
от
C++
1
long tmp = long(54.34);
?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Кудаив
329 / 406 / 24
Регистрация: 27.05.2012
Сообщений: 1,164
Завершенные тесты: 2
12.06.2013, 17:58     чем отличаются static_cast от #2
static_cast - безопасное приведение типа, поищи блог Алёны С++ - она здорово про приведения типов рассказывает
Issues
430 / 365 / 37
Регистрация: 06.08.2012
Сообщений: 961
12.06.2013, 18:07     чем отличаются static_cast от #3
http://alenacpp.blogspot.com/2005/08/c.html
MrGluck
Ворчун
Эксперт CЭксперт С++
 Аватар для MrGluck
6227 / 3472 / 424
Регистрация: 29.11.2010
Сообщений: 9,178
12.06.2013, 18:09     чем отличаются static_cast от #4
Сверху С++ стайл, более безопасная формула и в глаза бросается
Снизу С стайл, в С++ лишь по наследству оставили.
Croessmah
12.06.2013, 18:20
  #5

Не по теме:

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

Кудаив
329 / 406 / 24
Регистрация: 27.05.2012
Сообщений: 1,164
Завершенные тесты: 2
12.06.2013, 18:33     чем отличаются static_cast от #6
Croessmah, никакой разницы
MrGluck
Ворчун
Эксперт CЭксперт С++
 Аватар для MrGluck
6227 / 3472 / 424
Регистрация: 29.11.2010
Сообщений: 9,178
12.06.2013, 18:39     чем отличаются static_cast от #7
Кудаив, ну это как посмотреть. В данном контексте да, а вообще-то, в одном случае вызов конструктора, а во втором приведение типа.
Кудаив
329 / 406 / 24
Регистрация: 27.05.2012
Сообщений: 1,164
Завершенные тесты: 2
12.06.2013, 18:47     чем отличаются static_cast от #8
MrGluck, для встроенных типов никакой разницы, кроме указателей
MrGluck
Ворчун
Эксперт CЭксперт С++
 Аватар для MrGluck
6227 / 3472 / 424
Регистрация: 29.11.2010
Сообщений: 9,178
12.06.2013, 18:50     чем отличаются static_cast от #9
Кудаив, и как это противоречит с
Цитата Сообщение от MrGluck Посмотреть сообщение
В данном контексте да, а вообще-то,
?
Кудаив
329 / 406 / 24
Регистрация: 27.05.2012
Сообщений: 1,164
Завершенные тесты: 2
12.06.2013, 18:52     чем отличаются static_cast от #10
MrGluck, нет, никак
BAADF00D
Заблокирован
12.06.2013, 18:54     чем отличаются static_cast от #11
Цитата Сообщение от septe-mber Посмотреть сообщение
чем отличаются явное приведения типа
кастование необходимо для приведения типов - классов. Для встроенных же типов не стоит заморачиваться и можно применить второй вариант.
MrGluck
Ворчун
Эксперт CЭксперт С++
 Аватар для MrGluck
6227 / 3472 / 424
Регистрация: 29.11.2010
Сообщений: 9,178
12.06.2013, 19:14     чем отличаются static_cast от #12
BAADF00D, нет, не стоит. Код должен быть написан в едином стиле и первая конструкция явно бросается в глаза, а вторую можно даже не заметить.

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

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

Приведение в стиле С, напротив, спокойно "поглотит" проблемное место, в результате чего
ошибка всплывет только во время работы программы. Как водится, это произойдет не сразу, а
спустя некоторое время, скорее всего во время важной презентации софта, на глазах заказчика
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.06.2013, 20:14     чем отличаются static_cast от
Еще ссылки по теме:

Чем отличаются итераторы ::begin и ::cbegin? C++
C++ Чем отличаются по функционалу Kbhit() и _kbhit()
C++ Чем hpp-файлы отличаются от h-файлов?
Чем отличаются двумерные и одномерные массивы? C++
В чем разница между Си'шным приведением типа и унарной шаблонной функцией static_cast? C++

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

Или воспользуйтесь поиском по форуму:
MrGluck
Ворчун
Эксперт CЭксперт С++
 Аватар для MrGluck
6227 / 3472 / 424
Регистрация: 29.11.2010
Сообщений: 9,178
12.06.2013, 20:14     чем отличаются static_cast от #15
rangerx, да я неправильно прочел, думал там
C
1
long tmp = (long)54.34;
Yandex
Объявления
12.06.2013, 20:14     чем отличаются static_cast от
Ответ Создать тему
Опции темы

Текущее время: 09:08. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru