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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
thick_int
Заблокирован
#1

Запрет одного преобразования - C++

16.02.2012, 01:06. Просмотров 1244. Ответов 25
Метки нет (Все метки)

Есть ли в Visual C++ 2010 какая-нибудь возможность указать компилятору, что всякое неявное преобразование от числового типа в тип bool является ошибкой?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
16.02.2012, 16:25     Запрет одного преобразования #21
Цитата Сообщение от thick_int Посмотреть сообщение
А так просто уже ругается
переполнение фиксит же
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
thick_int
Заблокирован
16.02.2012, 17:47  [ТС]     Запрет одного преобразования #22
Цитата Сообщение от OstapBender Посмотреть сообщение
переполнение фиксит же
Тогда абсолютно нелогично выглядит допустимость вот такого кода
C#
1
2
float a = 2.0F, b = 3.0, c;
c = a + b;
То есть в целочиссленном случае она фиксит, а в вещественном уже по фигу.
silent_1991
Эксперт C++
4949 / 3025 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
16.02.2012, 18:22     Запрет одного преобразования #23
Цитата Сообщение от thick_int Посмотреть сообщение
нелогично
Это с чего вдруг? В первом случае две переменные типа short при сложении дают int'овый результат, который присваивается переменной типа short. Приведение типа с потерей информации не допускается. Во втором случае как переменные были float, так после сложения и остаются. Никакого приведения не требуется.
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
16.02.2012, 18:39     Запрет одного преобразования #24
да, там интересная ситуация, т.к для вещественных чисел компиль знает такое понятие как "бесконечность"

C#
1
2
3
4
5
            float f1 = float.MaxValue;
            float f2 = float.MaxValue;
            float f3 = f1 + f2;
 
            Console.Write("{0}\n{1}\n{2}\n", f1, f2, f3);
thick_int
Заблокирован
16.02.2012, 19:12  [ТС]     Запрет одного преобразования #25
Цитата Сообщение от silent_1991 Посмотреть сообщение
Это с чего вдруг? В первом случае две переменные типа short при сложении дают int'овый результат
Мне вообще кажется нелогичным именно то, что две переменные типа short дают при сложении тип int. Ведь в C++ это не так.
Где тут логика?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.02.2012, 19:40     Запрет одного преобразования
Еще ссылки по теме:

C++ Преобразования матриц
C++ Преобразования текста
конструктор преобразования C++
Аффинные преобразования в с++ C++
C++ Оператор преобразования

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

Или воспользуйтесь поиском по форуму:
Jupiter
Каратель
Эксперт C++
6548 / 3968 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
16.02.2012, 19:40     Запрет одного преобразования #26
Цитата Сообщение от thick_int Посмотреть сообщение
Мне вообще кажется нелогичным именно то, что две переменные типа short дают при сложении тип int.
корень сего лежит в ассемблере, где при сложении 2-х 32-х битных чисел часть результата помещается в 16-ть бит одного 32-х битного регистра, а остальная часть в 16 бит другого 32-х битного регистра, причина та же - избежание переполнения
Yandex
Объявления
16.02.2012, 19:40     Запрет одного преобразования
Ответ Создать тему
Опции темы

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