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

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

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

Привет всем!
чем отличаются явное приведения типа
http://www.cyberforum.ru/cpp-beginners/thread902579.html
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 от (C++):

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

Чем отличаются операторы while и for?
Добрый вечер, чем отличается while от for, в каких случаях нужно использовать...

Чем отличаются компиляторы?
Здравствуйте. 32-bit / 64-bit -- Понятно. Чем отличается threads-win32 от...

Чем отличаются инициализация класса
Здравствуйте, подскажите какая разница между 40 и 41 строками? #include...

Чем отличаются операторы вывода?
Чем отличаются операторы вывода cout и printf и какой более перспективно...

14
Кудаив
409 / 408 / 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Эксперт С++
7980 / 4861 / 1422
Регистрация: 29.11.2010
Сообщений: 13,235
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
Кудаив
409 / 408 / 72
Регистрация: 27.05.2012
Сообщений: 1,168
Завершенные тесты: 2
12.06.2013, 18:33 #6
Croessmah, никакой разницы
0
MrGluck
Модератор
Эксперт CЭксперт С++
7980 / 4861 / 1422
Регистрация: 29.11.2010
Сообщений: 13,235
12.06.2013, 18:39 #7
Кудаив, ну это как посмотреть. В данном контексте да, а вообще-то, в одном случае вызов конструктора, а во втором приведение типа.
0
Кудаив
409 / 408 / 72
Регистрация: 27.05.2012
Сообщений: 1,168
Завершенные тесты: 2
12.06.2013, 18:47 #8
MrGluck, для встроенных типов никакой разницы, кроме указателей
0
MrGluck
Модератор
Эксперт CЭксперт С++
7980 / 4861 / 1422
Регистрация: 29.11.2010
Сообщений: 13,235
12.06.2013, 18:50 #9
Кудаив, и как это противоречит с
Цитата Сообщение от MrGluck Посмотреть сообщение
В данном контексте да, а вообще-то,
?
0
Кудаив
409 / 408 / 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Эксперт С++
7980 / 4861 / 1422
Регистрация: 29.11.2010
Сообщений: 13,235
12.06.2013, 19:14 #12
BAADF00D, нет, не стоит. Код должен быть написан в едином стиле и первая конструкция явно бросается в глаза, а вторую можно даже не заметить.

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

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

Приведение в стиле С, напротив, спокойно "поглотит" проблемное место, в результате чего
ошибка всплывет только во время работы программы. Как водится, это произойдет не сразу, а
спустя некоторое время, скорее всего во время важной презентации софта, на глазах заказчика
2
MrGluck
Модератор
Эксперт CЭксперт С++
7980 / 4861 / 1422
Регистрация: 29.11.2010
Сообщений: 13,235
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
Привет! Вот еще темы с решениями:

Чем отличаются указатели от ссылок?
Как я понимаю указатель,он хранит адрес переменной,а ссылка просто берёт...

Чем отличаются ф-ии GlobalAllocPtr() и malloc()?
Здрасьте! Чем отличаются ф-ии GlobalAllocPtr() и malloc()? Спасибо!

Чем отличаются эти функции?
Аргумент в первой функции передается по значению. Это значит что создается...

Отличаются ли чем-нибудь двумерные массивы в Си и C++?
Они отличаются в этих языках чем-то?


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

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

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