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

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

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

static_cast - C++

03.02.2013, 15:53. Просмотров 1906. Ответов 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.02.2013, 15:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос static_cast (C++):

Static_cast - C++
Подскажи пожалуста return static_cast&lt;double&gt;(get_num())/get_den(); как это понимать, а то в книге написано, но не объяснено, а в...

static_cast - C++
В чем ошибка. ругается на &lt; и ( в строке newpound=static_cast&lt;int&gt;(newpound); #include &lt;iostream.h&gt; #include &lt;conio.h&gt; int...

static_cast, исключение - C++
Привет. dynamic_cast&lt;&gt; может выбросить исключение, при невозможности преобразования типа при работе с ссылками. старое приведение...

Оператор static_cast - C++
int N; cout &lt;&lt; &quot;введите размер маccива: &quot;; cin &gt;&gt; N; vector&lt;double&gt; matrix (N); for (int i = 0; i &lt; N; i++) //заполнение...

Использование static_cast - C++
Здравствуйте! Подскажите, почему такая конструкция не компилируется. int main() { int nWord = 4; char temp = static_cast&lt;...

чем отличаются static_cast от - C++
Привет всем! чем отличаются явное приведения типа long tmp = static_cast&lt;long&gt;(45.6); от long tmp = long(54.34); ?

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
gray_fox
What a waste!
1506 / 1209 / 68
Регистрация: 21.04.2012
Сообщений: 2,543
Завершенные тесты: 3
03.02.2013, 15:55 #2
The_bolT, потому что сначала делишь (целое / целое == целое), а потом приводишь. Очевидно, что надо наоборот:
C++
1
static_cast<float>(n) / m
Пёс
228 / 76 / 4
Регистрация: 03.02.2013
Сообщений: 311
03.02.2013, 18:14 #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 #4
C++
1
cout<<((float) n)/m;
Пёс
228 / 76 / 4
Регистрация: 03.02.2013
Сообщений: 311
03.02.2013, 19:09 #5
с неявным - красивее... но вот стоит ли оно того? там же ещё лишние вычисления....
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
03.02.2013, 19:46 #6
Пёс, нет не стоит.

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

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

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

Как работает static_cast? - C++
#include&lt;iostream&gt; using namespace std; int main(){ int a; cin&gt;&gt;a; cout&lt;&lt;sizeof(a)&lt;&lt;endl;//4 static_cast&lt;char&gt;(a); ...

Не очень понимаю static_cast - C++
Цитирую Прата: Под она имеется в виду операция static_cast Эксперимент: int main(){ int x = 32; char y = 2;

Ключевое слово static_cast - C++
Чё это такое?Зачем оно нужно?

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


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

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

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