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

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

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

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

12.06.2013, 17:55. Просмотров 608. Ответов 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 от (C++):

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

В чем разница между Си'шным приведением типа и унарной шаблонной функцией static_cast? - C++
В чем разница между Си'шным приведением типа: ... int x{5}; ifs.write( (char*)&amp;x, sizeof(int) ); ... и унарной шаблонной...

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

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

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

Чем отличаются указатели от ссылок? - C++
Как я понимаю указатель,он хранит адрес переменной,а ссылка просто берёт значение переменной?Привидите примерчик какой=)

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Кудаив
329 / 406 / 24
Регистрация: 27.05.2012
Сообщений: 1,168
Завершенные тесты: 2
12.06.2013, 17:58 #2
static_cast - безопасное приведение типа, поищи блог Алёны С++ - она здорово про приведения типов рассказывает
1
Issues
430 / 365 / 37
Регистрация: 06.08.2012
Сообщений: 961
12.06.2013, 18:07 #3
http://alenacpp.blogspot.com/2005/08/c.html
1
MrGluck
Модератор
Эксперт CЭксперт С++
7239 / 4407 / 642
Регистрация: 29.11.2010
Сообщений: 11,929
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
Кудаив
329 / 406 / 24
Регистрация: 27.05.2012
Сообщений: 1,168
Завершенные тесты: 2
12.06.2013, 18:33 #6
Croessmah, никакой разницы
0
MrGluck
Модератор
Эксперт CЭксперт С++
7239 / 4407 / 642
Регистрация: 29.11.2010
Сообщений: 11,929
12.06.2013, 18:39 #7
Кудаив, ну это как посмотреть. В данном контексте да, а вообще-то, в одном случае вызов конструктора, а во втором приведение типа.
0
Кудаив
329 / 406 / 24
Регистрация: 27.05.2012
Сообщений: 1,168
Завершенные тесты: 2
12.06.2013, 18:47 #8
MrGluck, для встроенных типов никакой разницы, кроме указателей
0
MrGluck
Модератор
Эксперт CЭксперт С++
7239 / 4407 / 642
Регистрация: 29.11.2010
Сообщений: 11,929
12.06.2013, 18:50 #9
Кудаив, и как это противоречит с
Цитата Сообщение от MrGluck Посмотреть сообщение
В данном контексте да, а вообще-то,
?
0
Кудаив
329 / 406 / 24
Регистрация: 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Эксперт С++
7239 / 4407 / 642
Регистрация: 29.11.2010
Сообщений: 11,929
12.06.2013, 19:14 #12
BAADF00D, нет, не стоит. Код должен быть написан в едином стиле и первая конструкция явно бросается в глаза, а вторую можно даже не заметить.

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

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

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

Чем отличаются операторы вывода? - C++
Чем отличаются операторы вывода cout и printf и какой более перспективно использовать? ;)

Чем отличаются эти функции? - C++
Аргумент в первой функции передается по значению. Это значит что создается копия переменной. А вот остальные не понимаю. void f1(int...

Чем отличаются динамические массивы от статических? - C++
Вот цитата: Мне непонятно следующее, как назвать такой массив? Ведь размер его задается в процесе выполнения програмы - значит...

Шаблоны, чем отличаются два шаблона - C++
Доброго времени суток! Продолжил читать книгу &quot;Решение сложных задач на С++&quot;, в ней есть задача - отправка содержимое из потока ввода в...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
12.06.2013, 20:14
Ответ Создать тему
Опции темы

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