![]() |
|
Модераторы: bsa |
![]()
|
|
| zim22 |
|
||||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
Почему в случае функции print у нас нет неоднозности, в отличии от функции f1?
В функции print тип short, с помощью "продвижения" интегрального типа, был преобразован в тип int. Почему же в функции f1 тип int не преобразовался в тип long int?
Это сообщение отредактировал(а) zim22 - 28.6.2009, 14:07 |
||||
|
|||||
| Riddik |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 2.12.2006 Репутация: нет Всего: нет |
Добавлено через 6 минут и 44 секунды Не успел увидеть изменения в первом посте. (с int на long) Во втором случае не скомпилируется - компилятор выдаст сообщение об ошибке, как раз о неодназначности перегруженных ф-ий. Это сообщение отредактировал(а) Riddik - 28.6.2009, 14:21 |
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
В данном случае нет смысла применять typeid. Он всегда будет возвращать тип параметра функции.
Вы констатируете факт. Мне же нужно объяснение этого факта. Это сообщение отредактировал(а) zim22 - 28.6.2009, 14:39 |
|||
|
||||
| Riddik |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 2.12.2006 Репутация: нет Всего: нет |
ступил, сорри.
|
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
Riddik, Вы издеваетесь, да?
Вы можете объяснить, почему компилятор справляется с неоднозначностью вызова в случае print и нет - в случае f1? Это сообщение отредактировал(а) zim22 - 28.6.2009, 15:13 |
|||
|
||||
| Riddik |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 2.12.2006 Репутация: нет Всего: нет |
У меня последние три дня приступы тупости, возможно после двух бессонных ночей. Приношу извенения за неадекватные ответы.
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
как нет? int to char - опасное преобразование int to long int - безопасное. long int лучше! *** "Страуструп" По поводу размеров фундаментальных типов гарантируется следующее: 1 == sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) Это сообщение отредактировал(а) zim22 - 28.6.2009, 16:43 |
|||
|
||||
| Gordon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 459 Регистрация: 9.7.2006 Репутация: 1 Всего: 6 |
mes, это ты правильно сказал... При переводе int хоть в long хоть в char мой компилятор не ругается, а вот при переводе short в char - выдает предупреждение! Другое дело почему?
Добавлено @ 16:43 zim22, по логике да, в long переводить лучше... Но между int и char какая-то особая "связь"... Это сообщение отредактировал(а) Gordon - 28.6.2009, 16:44 -------------------- |
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
||||
|
||||
| mes |
|
||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
Дело не в их размере, а в том что int особенный и в него позволено конвертировать другие интегральные типы, которые в него помещаются. long является лучшим только например для w_char_t при условии, что последний не помещается в int. а вот например хоть short и вмещает char, он не будет подходящим преобразованием. сейчас в стандарте поищу.. Добавлено @ 16:50
Это сообщение отредактировал(а) mes - 29.6.2009, 10:34 |
||||
|
|||||
| Gordon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 459 Регистрация: 9.7.2006 Репутация: 1 Всего: 6 |
Понятное дело, так и должно быть! Ну так и int тоже по размеру больше чем char, а предупреждения нет... -------------------- |
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
есть. нужно просто warning level: 4 поставить. по умолчанию он 3. mes, спасибо Это сообщение отредактировал(а) zim22 - 28.6.2009, 17:03 |
|||
|
||||
| Gordon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 459 Регистрация: 9.7.2006 Репутация: 1 Всего: 6 |
У меня char->short без предупреждений проходит... char занимает 1 байт, а short 2... Добавлено через 5 минут и 32 секунды zim22, может быть, но только на одном уровне (как ты говоришь - 3), в одном случае нет возмущения а в другом есть... Значит все равно какая-то тонкость есть... ??? -------------------- |
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
||||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |