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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.64
The_bolT
70 / 70 / 1
Регистрация: 22.01.2013
Сообщений: 231
#1

static_cast - C++

03.02.2013, 15:53. Просмотров 1790. Ответов 35
Метки нет (Все метки)

Почему не работает static_cast<float>(n/m);? Как сделать чтобы он все же перевел это к типу float?
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
 
using namespace std;
 
int main()
{
    int n=7,m=3;
    cout<<(float)n/m<<endl<<static_cast<float>(n/m);
    system("pause>0");
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gray_fox
What a waste!
 Аватар для gray_fox
1252 / 1135 / 54
Регистрация: 21.04.2012
Сообщений: 2,357
Завершенные тесты: 3
03.02.2013, 15:55     static_cast #2
The_bolT, потому что сначала делишь (целое / целое == целое), а потом приводишь. Очевидно, что надо наоборот:
C++
1
static_cast<float>(n) / m
Пёс
 Аватар для Пёс
228 / 76 / 4
Регистрация: 03.02.2013
Сообщений: 311
03.02.2013, 18:14     static_cast #3
Цитата Сообщение от The_bolT Посмотреть сообщение
Почему не работает static_cast<float>(n/m);? Как сделать чтобы он все же перевел это к типу float?
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
 
using namespace std;
 
int main()
{
    int n=7,m=3;
    cout<<(float)n/m<<endl<<static_cast<float>(n/m);
    system("pause>0");
    return 0;
}
Ещё легче было сделать так ))))

C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
 
using namespace std;
 
int main()
{
    int n=7,m=3;
    cout<<n/m/1.<<endl;
    system("pause>0");
    return 0;
}
Добавлено через 1 минуту
только 1. вначале написать

Добавлено через 1 минуту
вот так

C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
 
using namespace std;
 
int main()
{
    int n=7,m=3;
    cout<<1./n/m<<endl;
    system("pause>0");
    return 0;
}
TakeOver
41 / 31 / 1
Регистрация: 03.02.2013
Сообщений: 61
03.02.2013, 18:16     static_cast #4
C++
1
cout<<((float) n)/m;
Пёс
 Аватар для Пёс
228 / 76 / 4
Регистрация: 03.02.2013
Сообщений: 311
03.02.2013, 19:09     static_cast #5
с неявным - красивее... но вот стоит ли оно того? там же ещё лишние вычисления....
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
03.02.2013, 19:46     static_cast #6
Пёс, нет не стоит.

1) это запутывает
2) приведения типов есть - это более прямой путь
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
03.02.2013, 19:46     static_cast #7
TakeOver, про это сразу забудьте.

PS. Не увидел, что у ТС тоже используется приведение в Си стиле. Так вот, этот ответ и к нему относится в равной степени.
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
03.02.2013, 19:48     static_cast #8
soon, варум? Я сам этим пользуюсь, очень удобно.

Добавлено через 37 секунд
И не надо о том, что "код становится яснее". Он становится более громоздким.
Есть комментарии и точка.
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
03.02.2013, 19:53     static_cast #9
Kgfq, Вы и константность снимаете с переменных на ура, да еще и пишете туда что-либо.
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
03.02.2013, 19:56     static_cast #10
soon, но не бездумно же.
gray_fox
What a waste!
 Аватар для gray_fox
1252 / 1135 / 54
Регистрация: 21.04.2012
Сообщений: 2,357
Завершенные тесты: 3
03.02.2013, 19:57     static_cast #11
Цитата Сообщение от Kgfq Посмотреть сообщение
Он становится более громоздким.
Зато пока пишешь reinterpret_cast<...>(...), 5 раз подумаешь: "а надо ли тебе это?" ) В действительности не такие уж эти операторы и громоздкие и более ясно выражают намерения + их легко найти.
Цитата Сообщение от Kgfq Посмотреть сообщение
Есть комментарии и точка.
Okay
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
03.02.2013, 19:59     static_cast #12
gray_fox, "reinterpret_cast<float>(JaPeremennaja)" Заняло ~треть экрана. Не громоздким, говорите?
Пёс
 Аватар для Пёс
228 / 76 / 4
Регистрация: 03.02.2013
Сообщений: 311
03.02.2013, 20:01     static_cast #13
А зачем вообще придумали const_cast<T>(); ??? Это ж такая быдлятина, которой свет не видовал... В 100 раз сильнее путает код, чем всем известный goto!
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
03.02.2013, 20:04     static_cast #14
Пёс, оно не путает, а помогает понять, какое приведение хотел сделать программист. Единственное что, код становится громоздким. А насчет готу вы не правы, поскольку бывают очень запущенные случаи. И новичку лучше его не юзать вообще.
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
03.02.2013, 20:08     static_cast #15
soon, но не бездумно же.
Разумеется, есть логичное объяснение тому, что, наплевав на стандарт, мы изменим константу.
Пёс
 Аватар для Пёс
228 / 76 / 4
Регистрация: 03.02.2013
Сообщений: 311
03.02.2013, 20:15     static_cast #16
Kgfq, Но ведь если допустим в аргумент функции передаётся const указатель, а внутри берут и нагло консткастят её, то программист, который пользуется этой функцией ни о чем не подозревает! Слово const явно говорит ему что данные не будут изменены, а тут бац и изменились!!! это же очень путает
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
03.02.2013, 20:17     static_cast #17
soon, вы уперлись рогом. Смотрите шире.

Пёс, а если эти изменения необходимы, но программисту просто не нужно знание о изменении объекта?
gray_fox
What a waste!
 Аватар для gray_fox
1252 / 1135 / 54
Регистрация: 21.04.2012
Сообщений: 2,357
Завершенные тесты: 3
03.02.2013, 20:22     static_cast #18
Kgfq,

Не по теме:

вы случайно не с телефона пишите?)

Я не спорю, что они "длинные", но и особой проблемы в написании 10 с лишним лишних символов лично не вижу. С шаблонами в этом плане всё может быть намного хуже, например.
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
03.02.2013, 20:25     static_cast #19
gray_fox,

Не по теме:

с чего вы взяли про телефон? оО



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

Чем отличаются dynamic_cast и static_cast? C++
отличия dynamic_cast, static_cast и (object*) C++
Dynamic_cast и static_cast: в чём смысл? C++
C++ Оператор static_cast
Как работает static_cast? C++

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

Или воспользуйтесь поиском по форуму:
Пёс
 Аватар для Пёс
228 / 76 / 4
Регистрация: 03.02.2013
Сообщений: 311
03.02.2013, 20:26     static_cast #20
Kgfq, Программист может... и даже не может, а будет расчитывать на то что измений не произойдёт. А если оно всё же произойдёт, то он потом будет очень долго искать ошибку в СВОЕЙ программе. И он её не найдет, потому что это не его ошибка.
Yandex
Объявления
03.02.2013, 20:26     static_cast
Ответ Создать тему
Опции темы

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