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

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

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

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

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

Есть ли в Visual C++ 2010 какая-нибудь возможность указать компилятору, что всякое неявное преобразование от числового типа в тип bool является ошибкой?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.02.2012, 01:06
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Запрет одного преобразования (C++):

MinGW запрет неявного преобразования типов - C++
Существует ли какой то режим у gcc (MinGW) где бы компилятор "ругался" или хотя бы предупреждал о неявном преобразование типов? Причем не...

Реализовать двусвязный список. В разных узлах одного списка может быть любой объект одного из допустимых типов (своих знаний не хватает) - C++
Вобщем делаю тестовые задания. На одно мне даже ответили, результат отрицательный. Помогите понять если кто поймёт его не так как я или...

преобразования в Си... - C++
Помогите разработать программу преобразования целых десятичных чисел с разрядностью до 7 цифр в словесное описание без грамматических...

конструктор преобразования - C++
конструктор преобразования "Любой конструктор класса, принимающий один параметр какого-либо другого типа, называется конструктором...

преобразования типов - C++
void foo(int i) {...} string str("abcdef"); //..... enum BoardLetter {a = 0, b, c, d, e, f, g, h}; foo( ...

спецификаторы преобразования - C++
Даны спецификаторы преобразования A) %f B) %d C) %x D) %o E) %u 1.для вывода десятичных целых чисел со знаком? 2. для...

25
CheshireCat
Эксперт С++
2893 / 1242 / 78
Регистрация: 27.05.2008
Сообщений: 3,379
16.02.2012, 15:12 #16
Ну, в общем, это-то понятно.....
Непонятно другое: зачем вообще это понадобилось ТС ? Подобное преобразование входит в Standard conversions наряду с другими. Если же ТС хочет заведомо обезопасить себя от кривых ручек - добро пожаловать в более безопасный язык - C#, например. Который как раз и разрабатывался соответствующим образом. Нет?
0
Bers
Заблокирован
16.02.2012, 15:25 #17
Цитата Сообщение от CheshireCat Посмотреть сообщение
...обезопасить себя от кривых ручек - добро пожаловать в более безопасный язык - C#
Если хочется писать код на более мощном и быстром языке, и при этом есть возможность "бесплатно" обезопасить код, почему бы этим не воспользоваться?

Лично я вообще никакие дополнительные ключики компилятору не ставлю. Однако не пропускаю ни одного варнинга. Варнингов быть не должно в принципе.

Цитата Сообщение от CheshireCat Посмотреть сообщение
А если в каком-то месте программы это не ошибка?
Даже если сие - задумка автора а все одно - суть мина замедленного действия, и тормоз для сопровождения, а посему не быть ей в коде.

А тот кто с этим не согласный, пусть приведёт реальный пример, где конструкцию вида: if(a=b) {...}
нельзя преобразовать к виду: a=b; if(a!=0) {...}

Или идет нафег.
0
fasked
Эксперт С++
4942 / 2522 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
16.02.2012, 15:30 #18
Цитата Сообщение от CheshireCat Посмотреть сообщение
Гмм. А если в каком-то месте программы это не ошибка?
gcc обычно пропускает, если выражение взято в скобки, может и у VS аналогичное поведение предусмотрено:
C++
1
if ((x = y))
0
thick_int
Заблокирован
16.02.2012, 15:46  [ТС] #19
Цитата Сообщение от silent_1991 Посмотреть сообщение
Надо, чтобы за всем небезопасным следил компилятор - его выбор шарп
Шарп просто убивает вот таким косяком.
C#
1
2
short a = 2, b =3, c;
c = (short)(a + b);
А так просто уже ругается
C#
1
c = a + b;
Уж лучше Visual Basic тогда. Кстати, прощу прощения, что вопрос несколько не по теме. А почему Шарп, ну во всяком случае в России, как то более востребован по сравнению с Visual Basic. Вроде Basic постарее и поофиснее на предмет макросов в MS Officee, ан нет все же Шарп повостребованнее. Вообще кстати такое ощущение, что Шарп - самый востребованный язык. Откуда это? Непонятно.
0
Bers
Заблокирован
16.02.2012, 16:03 #20
Цитата Сообщение от thick_int Посмотреть сообщение
Откуда это?
Это - коварство и хитрость корпорации Зла.
1
OstapBender
583 / 522 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
16.02.2012, 16:25 #21
Цитата Сообщение от thick_int Посмотреть сообщение
А так просто уже ругается
переполнение фиксит же
0
thick_int
Заблокирован
16.02.2012, 17:47  [ТС] #22
Цитата Сообщение от OstapBender Посмотреть сообщение
переполнение фиксит же
Тогда абсолютно нелогично выглядит допустимость вот такого кода
C#
1
2
float a = 2.0F, b = 3.0, c;
c = a + b;
То есть в целочиссленном случае она фиксит, а в вещественном уже по фигу.
0
silent_1991
Эксперт С++
4984 / 3041 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
16.02.2012, 18:22 #23
Цитата Сообщение от thick_int Посмотреть сообщение
нелогично
Это с чего вдруг? В первом случае две переменные типа short при сложении дают int'овый результат, который присваивается переменной типа short. Приведение типа с потерей информации не допускается. Во втором случае как переменные были float, так после сложения и остаются. Никакого приведения не требуется.
0
OstapBender
583 / 522 / 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);
0
thick_int
Заблокирован
16.02.2012, 19:12  [ТС] #25
Цитата Сообщение от silent_1991 Посмотреть сообщение
Это с чего вдруг? В первом случае две переменные типа short при сложении дают int'овый результат
Мне вообще кажется нелогичным именно то, что две переменные типа short дают при сложении тип int. Ведь в C++ это не так.
Где тут логика?
0
Jupiter
Каратель
Эксперт С++
6556 / 3977 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
16.02.2012, 19:40 #26
Цитата Сообщение от thick_int Посмотреть сообщение
Мне вообще кажется нелогичным именно то, что две переменные типа short дают при сложении тип int.
корень сего лежит в ассемблере, где при сложении 2-х 32-х битных чисел часть результата помещается в 16-ть бит одного 32-х битного регистра, а остальная часть в 16 бит другого 32-х битного регистра, причина та же - избежание переполнения
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.02.2012, 19:40
Привет! Вот еще темы с ответами:

явные преобразования - C++
откоректируйте синтаксис Any a; f("",ios::binary); /* * */ f.write((char*) a,sizeof(a));

Перегрузка преобразования - C++
Как перегрузить в классе явное преобразование? Что бы он корректно воспринимал строки вида: A a; B b = B(a);

Функции преобразования - C++
Hi all Вот первый код #include "stdafx.h" #include "conio.h" using namespace std; class String{ private: char* ptr; ...

Оператор преобразования - C++
Приветствую всех! Есть у Р. Лафоре в книге "Объектно-ориентированное программирование в C++" такой пример: //ENGLCONV.cpp ...


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

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

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