Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
Заблокирован
1

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

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

Author24 — интернет-сервис помощи студентам
Есть ли в Visual C++ 2010 какая-нибудь возможность указать компилятору, что всякое неявное преобразование от числового типа в тип bool является ошибкой?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.02.2012, 01:06
Ответы с готовыми решениями:

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

Запрет сужающего преобразования. Инициализация списком. Как это применять на практике?
Книга: Сиддхартха Рао. Освой самостоятельно С++ по одному часу в день. Страницы 71 - 72. Вот такой...

Как в VBA в поле Textbox сделать запрет на ввод более одного слова (или запрет на ввод пробелов)?
Добрый день. Нужно, чтобы в поле TextBox можно было ввести не более одного слова (в противном...

Запрет преобразования базы данных в другую версию
Помогите,пожалуйста!Программа на Access 97,некоторые пользователи открывают программу в Access 2000...

25
1186 / 542 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
16.02.2012, 01:16 2
thick_int, не думаю что есть такая возможность, не используйте bool вообще если есть проблемы с преобразованием к нему.

Добавлено через 33 секунды
Или это Вы хотите условия вроде
C++
1
2
3
int x=3;
if(x)
 ...
убрать? Так не получиться так.
0
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
16.02.2012, 01:17 3
изучай опции компилятора http://msdn.microsoft.com/en-u... 1t1wy.aspx
в частности http://msdn.microsoft.com/en-u... ezb7y.aspx
мб чего и найдешь но думаю вряд ли такой запрет есть
0
214 / 116 / 14
Регистрация: 30.05.2011
Сообщений: 1,772
16.02.2012, 01:23 4
thick_int, только ежели оборачивать типы в классы и задавать explicit конструктор. тогда не будет никаких неявных преобразований.
0
385 / 229 / 12
Регистрация: 06.07.2011
Сообщений: 512
16.02.2012, 01:48 5
интересна ситуация, в которой это может понадобиться... или просто перестраховка от излишеств программиста?
0
Заблокирован
16.02.2012, 02:11  [ТС] 6
Да это понадобиться может только дляя того чтобы не путать операции = и == в операторе if.
0
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
16.02.2012, 02:19 7
Цитата Сообщение от thick_int Посмотреть сообщение
Да это понадобиться может только дляя того чтобы не путать операции = и == в операторе if.
используй обратную нотацию
C++
1
if (5 == i)
C
1
if (NULL == (file = fopen(...)))
0
Заблокирован
16.02.2012, 03:49  [ТС] 8
Нет, ну это известный прием.
Но он не ссрабатывает, когда нужно сравнить значение двух переменных.
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
16.02.2012, 07:45 9
thick_int, используйте стандартные функторы отношений:
C++
1
2
if (std::less<int>()(a, b))
    std::cout << "a < b" << std::endl;
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
16.02.2012, 08:31 10
silent_1991, у С++ и так с читаемостью не очень, а ты предлагаешь такие решения

thick_int, насчет "покурить опции компилятора" уже посоветовали. Например для gcc получить желаемое поведение для кода:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{
    int a = 3;
    int b = 4;
 
    if(a = b)
    puts("WHAT?");
    
    exit(0);
}
можно с помощью флага -Werror=parentheses (здесь мы получим ошибку компиляции). Скорее всего, и для cl.exe есть подобный флаг
1
silent_1991
16.02.2012, 09:21
  #11

Не по теме:

Nameless One, ну так какой вопрос))) А то сегодня мы запретили присваивание в условии, а завтра удаляем невалидный указатель.
Если человек взялся писать на плюсах - он должен быть готов возможности прострелить себе ногу на каждом шагу. Надо, чтобы за всем небезопасным следил компилятор - его выбор шарп или джава))

0
594 / 532 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
16.02.2012, 14:16 12
Ну можно поставить в опциях VS "Treat warnings as errors"
0
Заблокирован
16.02.2012, 14:59 13
Цитата Сообщение от thick_int Посмотреть сообщение
Есть ли в Visual C++ 2010 какая-нибудь возможность указать компилятору, что всякое неявное преобразование от числового типа в тип bool является ошибкой?
Студия кажет варнинги, если внутри условия встретит =, вместо ==.
Так же, в студии есть возможность приравнять варнинг к ошибке.

/we n
Treats the specific compiler warning as an error where n is a compiler warning.
For example, /we4326 flags warning number C4326 as an error.

Можно попросить компилятор определенные предупреждения расценивать как ошибку.
1
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
16.02.2012, 15:02 14
Гмм. А если в каком-то месте программы это не ошибка?
0
Заблокирован
16.02.2012, 15:06 15
Цитата Сообщение от CheshireCat Посмотреть сообщение
Гмм. А если в каком-то месте программы это не ошибка?
Для какого то особого места варнинг можно "временно отключить" , после прохождения этого места "снова включить"


http://msdn.microsoft.com/en-u... s.71).aspx
0
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
16.02.2012, 15:12 16
Ну, в общем, это-то понятно.....
Непонятно другое: зачем вообще это понадобилось ТС ? Подобное преобразование входит в Standard conversions наряду с другими. Если же ТС хочет заведомо обезопасить себя от кривых ручек - добро пожаловать в более безопасный язык - C#, например. Который как раз и разрабатывался соответствующим образом. Нет?
0
Заблокирован
16.02.2012, 15:25 17
Цитата Сообщение от CheshireCat Посмотреть сообщение
...обезопасить себя от кривых ручек - добро пожаловать в более безопасный язык - C#
Если хочется писать код на более мощном и быстром языке, и при этом есть возможность "бесплатно" обезопасить код, почему бы этим не воспользоваться?

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

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

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

Или идет нафег.
0
Эксперт С++
5043 / 2622 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 1
16.02.2012, 15:30 18
Цитата Сообщение от CheshireCat Посмотреть сообщение
Гмм. А если в каком-то месте программы это не ошибка?
gcc обычно пропускает, если выражение взято в скобки, может и у VS аналогичное поведение предусмотрено:
C++
1
if ((x = y))
0
Заблокирован
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
Заблокирован
16.02.2012, 16:03 20
Цитата Сообщение от thick_int Посмотреть сообщение
Откуда это?
Это - коварство и хитрость корпорации Зла.
1
16.02.2012, 16:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.02.2012, 16:03
Помогаю со студенческими работами здесь

Преобразования одного типа в другой
Добрый день.Столкнулся с такой проблемой.Есть запрос на получения id и есть другой запрос в котором...

Запрет регистрации с одного IP
Как сделать в файле registration.php запрет регистрации с 1 ip? И что нужно добавить в базу данных...

Циклическое применение одного преобразования к разным столбцам
есть матрица с N числом столбцов. необходимо выполнить вейвлет разложение последовательно по...

Запрет двух сессий с одного ip
Есть сайт с БД, в которой хранятся данные пользователей (имя, емейл, пасс и т.д.) Как сделать...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru