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

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

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

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

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

Есть ли в Visual C++ 2010 какая-нибудь возможность указать компилятору, что всякое неявное преобразование от числового типа в тип bool является ошибкой?
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. для...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Gepar
1175 / 531 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
16.02.2012, 01:16 #2
thick_int, не думаю что есть такая возможность, не используйте bool вообще если есть проблемы с преобразованием к нему.

Добавлено через 33 секунды
Или это Вы хотите условия вроде
C++
1
2
3
int x=3;
if(x)
 ...
убрать? Так не получиться так.
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
16.02.2012, 01:17 #3
изучай опции компилятора http://msdn.microsoft.com/en-us/library/19z1t1wy.aspx
в частности http://msdn.microsoft.com/en-us/library/thxezb7y.aspx
мб чего и найдешь но думаю вряд ли такой запрет есть
AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
16.02.2012, 01:23 #4
thick_int, только ежели оборачивать типы в классы и задавать explicit конструктор. тогда не будет никаких неявных преобразований.
Paporotnik
383 / 227 / 7
Регистрация: 06.07.2011
Сообщений: 512
16.02.2012, 01:48 #5
интересна ситуация, в которой это может понадобиться... или просто перестраховка от излишеств программиста?
thick_int
Заблокирован
16.02.2012, 02:11  [ТС] #6
Да это понадобиться может только дляя того чтобы не путать операции = и == в операторе if.
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
16.02.2012, 02:19 #7
Цитата Сообщение от thick_int Посмотреть сообщение
Да это понадобиться может только дляя того чтобы не путать операции = и == в операторе if.
используй обратную нотацию
C++
1
if (5 == i)
C
1
if (NULL == (file = fopen(...)))
thick_int
Заблокирован
16.02.2012, 03:49  [ТС] #8
Нет, ну это известный прием.
Но он не ссрабатывает, когда нужно сравнить значение двух переменных.
silent_1991
Эксперт С++
4963 / 3039 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
16.02.2012, 07:45 #9
thick_int, используйте стандартные функторы отношений:
C++
1
2
if (std::less<int>()(a, b))
    std::cout << "a < b" << std::endl;
Nameless One
Эксперт С++
5771 / 3420 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
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 есть подобный флаг
silent_1991
16.02.2012, 09:21
  #11

Не по теме:

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

OstapBender
583 / 521 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
16.02.2012, 14:16 #12
Ну можно поставить в опциях VS "Treat warnings as errors"
Bers
Заблокирован
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.

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


http://msdn.microsoft.com/en-us/libr...(v=vs.71).aspx
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.02.2012, 15:06
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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