Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.10.2012, 23:58   #11
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от pproger Посмотреть сообщение
и совсем не поэтому. 3.0/2.0 даст тип double. 3.0f/2.0f даст тип float. переменная, к которой присваивается результат может быть объявлена как угодно, хоть char, просто к ней неявно приведется полученный результат (если неявное приведение возможно).
К char он не приведётся. В этом случае нужно явно его привести к типу, иначе компиль выдаст ошибку.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 02.10.2012, 00:54   #12
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2Smitt&Wesson
приведется. хотя и выдастся предупреждение об усечении типа и возможной потере данных. предупреждение не ошибка. да и char я в качестве примера привел. основной тезис - результат выражения не зависит от типа переменной, к которой оно присваивается, зависит лишь от типов операндов и правил продвижения типов в выражениях.
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 02.10.2012, 09:24   #13
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

rvalue приводится к наибольшему типу в выражении.
lvalue не играет роли, если lvalue не хватит то просто выдаст warning и (возможно, зависит от компилятора) runtime ошибку при переполнении.
waleri вне форума Ответить с цитированием
Старый 02.10.2012, 12:33   #14
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
rvalue приводится к наибольшему типу в выражении.
а вот и нифига. это всего лишь частный случай. по твоему заявлению, результат выражения
Код:
short x = 10;
char y = 20;
cout << x + y << endl;
будет соответствовать типу short. а это не так. поэтому я и говорю, что тип выражения зависит от типов операндов и правил продвижения типов (кстати, в языках С и С++ эти правила слегка отличаются)
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 02.10.2012, 15:08   #15
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

10 и 20 - int, так что привидется к int

а вот
short lv = char(10) + short(20) будет short // по вашей логике ето int и будет warning

Я думаю, что если у cout есть оператор << для short тогда он и выполнится, другое дело какой будет автоматический cast.

Последний раз редактировалось waleri; 02.10.2012 в 15:10.
waleri вне форума Ответить с цитированием
Старый 02.10.2012, 15:23   #16
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2waleri
Цитата:
10 и 20 - int, так что привидется к int
в выражении мы работаем с переменными x и y, а не с литералами 10 и 20. x и y это соответственно short и char.

Цитата:
short lv = char(10) + short(20) будет short // по вашей логике ето int и будет warning
да, по нашей логике это int
http://codepad.org/kC0kudXo

если тебе больше литералы нравятся - пожалуйста
http://codepad.org/V7uPYS1f

short-ом он станет уже после присваивания к lvalue. а будет варнинг или нет, зависит от компилятора и ключей компиляции
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance

Последний раз редактировалось pproger; 02.10.2012 в 16:03.
pproger вне форума Ответить с цитированием
Старый 02.10.2012, 16:25   #17
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Хорошо, согласен со следуущей пооправкой: "rvalue приводится к наибольшему типу в выражении, но не меньше чем int"
waleri вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выдает неверное число ZoomHz Общие вопросы C/C++ 2 07.03.2012 17:26
Неверное определение размера файла? _SERGEYX_ Свободное общение 2 17.11.2010 13:28
Неверное выполнение программы вычисления green-tree Помощь студентам 2 20.08.2010 09:40