Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 5.00/18: Рейтинг темы: голосов - 18, средняя оценка - 5.00
15 / 15 / 3
Регистрация: 04.02.2013
Сообщений: 124

Что плохого в явном написании условия в if?

28.06.2015, 12:37. Показов 4313. Ответов 78
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
людей которые пишут
C++
1
if (a==0)
а тем более
C++
1
if (a==false)
вместо
C++
1
if (!a)
Умными или адекватными назвать трудно.
Вы не погорячились? что такого плохого в
C++
1
if (a==0)
или
C++
1
if (a==false)
?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.06.2015, 12:37
Ответы с готовыми решениями:

Просьба помочь разобраться в написании проверки условия.
Здравствуйте, уважаемые форумчане. Пишу ограничение, которое запрещает вводить символы кроме русских букв для полей "Наименование...

Что означает объявить элемент в явном виде?
Что означает объявить элемент в явном виде? Получается, что существует также неявный вид объявления элементов? Как это осуществить и зачем...

Нарушение стека в RunDll32. Что плохого случится?
Здравствуйте! Почитал статью от Raymond Chen What can go wrong when you mismatch the calling convention? . Я ее немного переведу:...

78
 Аватар для Fulcrum_013
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
28.06.2015, 14:02
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Mr.X Посмотреть сообщение
Тогда уж
а еще лучше
C++
1
if ((nullptr!=nullptr)==a)
Хотя если реально в коде поставить дефайн из моей подписи, как ни пиши а работать прога будет весело.
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
28.06.2015, 14:08
Цитата Сообщение от goditsa8 Посмотреть сообщение
Не факт, например, указав a == false можно заодно обозначить, что переменная a имеет тип bool. Называется это самодокументируемый код.
Самодокументируемый код, это когда имена типов, переменных и функций являются содержательными и сами рассказывают о себе, к примеру
C++
1
if( path_exists )
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
28.06.2015, 14:09
Цитата Сообщение от castorsky Посмотреть сообщение
0x10, пардон, там должно быть статическая.
"Строгая" — было сказано уместно. В языках со строгой типизацией отсутствуют неявные преобразования. Например, на java не while (1) приведет к ошибке компиляции.
0
3178 / 1937 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
28.06.2015, 14:12
Цитата Сообщение от castorsky Посмотреть сообщение
в языке со строгой типизацией
C/C++ не требуют здесь bool типа. Выражение в скобках сравнивается с нулем (типа, test eax,eax / jz).
0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
28.06.2015, 14:13
0x10, ну тогда еще раз пардон

Добавлено через 33 секунды
gazlan, поэтому я и говорю, что в c++ фактически тип bool отсутствует. В нем даже вовсе нет никакой необходимости и его формальное наличие это собачья пятая нога.
0
3178 / 1937 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
28.06.2015, 14:20
Цитата Сообщение от castorsky Посмотреть сообщение
это собачья пятая нога

Не по теме:

Влияние Pascal, вероятно.

0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
28.06.2015, 14:26
Цитата Сообщение от gazlan Посмотреть сообщение
Влияние Pascal, вероятно.
Так сложилось что ничего серьезного с этим языком я никогда не имел.
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
28.06.2015, 14:42
Цитата Сообщение от gazlan Посмотреть сообщение
Выражение в скобках сравнивается с нулем (типа, test eax,eax / jz).
0 это false
я правильно понимаю что if(false) сработает

Добавлено через 1 минуту
Цитата Сообщение от castorsky Посмотреть сообщение
что в c++ фактически тип bool отсутствует.
и ссылку на стандарт можно увидеть?
0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
28.06.2015, 14:47
Цитата Сообщение от ValeryS Посмотреть сообщение
и ссылку на стандарт можно увидеть?
Какую еще ссылку? Вам объективных доводов мало? Или Вы из тех кто верит всему что на заборе написано? Я же сразу сказал фактически его нет, а то что он там есть на бумагах и прочем это школьникам.
0
3178 / 1937 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
28.06.2015, 14:49
Цитата Сообщение от ValeryS Посмотреть сообщение
я правильно понимаю что if (false) сработает
Нет. Реальный код (инверсия условия, например, jz/jnz итд.) будет зависеть от оптимизатора. (Причем, между test и jxx может оказаться еще несколько инструкций).
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
28.06.2015, 14:54
речь шла о
C++
1
if(a==false)
так вот if срабатывает когда в скобках true
a==false равно true может быть в одном случае если a это false
но !a тогда будет равно true
следовательно это тавтология
и достаточно написать
C++
1
if(!a)
теперь рассмотрим
C++
1
if(a==true)
a==true будет равно true тогда когда a это true
следовательно опять тавтология
C++
1
if(a)
я видал и такое
C++
1
2
3
4
if(a==true)
 return true;
else
 return false
Добавлено через 1 минуту
Цитата Сообщение от castorsky Посмотреть сообщение
Я же сразу сказал фактически его нет,
и какие доказательства?
так можно сказать что char нет
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
28.06.2015, 14:58
Цитата Сообщение от castorsky Посмотреть сообщение
Я же сразу сказал фактически его нет, а то что он там есть на бумагах и прочем это школьникам.
Если бы тип bool отсутствовал, что было бы эквивалентно наличию синонима 'bool' для одного из интегральных типов, то этот код не скомпилировался бы из-за неоднозначности:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
 
void f(int) {
    std::cout << "f(int)" << std::endl;
}
 
void f(bool) {
    std::cout << "f(bool)" << std::endl;
}
 
int main() {
    f(42);
    f(true);
}
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
28.06.2015, 15:00
Цитата Сообщение от gazlan Посмотреть сообщение
инверсия условия, например, jz/jnz итд.
и где здесь сравнение с 0?
есть переход если флаг 0 установлен/не установлен
а флаг можно и вручную установить
и потом я не стал бы апеллировать к ассемблеру, их много есть на свете
например есть еще условное выполнение
0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
28.06.2015, 15:06
Цитата Сообщение от ValeryS Посмотреть сообщение
и какие доказательства?
То что общеизвестно не нуждается в доказательстве. Есть ноль - ложь, и всё остальное - истина. В языках, в которых присутствует логический тип ноль - число, а false - ложь, не ноль - тоже число, а true - истина. Понимаете разницу?

Добавлено через 1 минуту
0x10, а если бы тип bool присутствовал, то этот код не скомпилировался из-за несоответствия типов.
C++
1
2
3
4
int a;
if (a) {
  ...
}
Вот же ж дилема какая.
0
3178 / 1937 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
28.06.2015, 15:06
Цитата Сообщение от ValeryS Посмотреть сообщение
и где здесь сравнение с 0?
О сравнении с нулем речь шла несколько раньше, в #148.
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
28.06.2015, 15:07
Цитата Сообщение от castorsky Посмотреть сообщение
то этот код не скомпилировался из-за несоответствия типов
Как я уже говорил выше, это следствие не отсутствия типа, а слабой типизации языка.
0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
28.06.2015, 15:09
Цитата Сообщение от 0x10 Посмотреть сообщение
Как я уже говорил выше, это следствие не отсутствия типа, а слабой типизации языка.
Это следствие убогого дизайна языка, а не слабой типизации.

Добавлено через 1 минуту
т.е. формально тип есть, а практически в нем нет никакой нужды. И типизация тут не при чем.
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
28.06.2015, 15:13
Цитата Сообщение от castorsky Посмотреть сообщение
В языках, в которых присутствует логический тип ноль - число, а false - ложь, не ноль - тоже число, а true - истина.
так в с++ так же
просто он позволяет неявные приведения
простой пример
C++
1
2
3
4
5
6
bool a=false;
a++;
a++;
a++;
a++;
int b=a;
b будет равно 1, а не 4 как если бы bool замаскированным int
равно как и
C++
1
2
char a=5;
int b=a;
будем утверждать что char нет?

Добавлено через 2 минуты
Цитата Сообщение от castorsky Посмотреть сообщение
т.е. формально тип есть, а практически в нем нет никакой нужды.
на практическую реализацию
C++
1
2
int a=xxxxx;
int b=!!a
xxxxx какое то число
b будет равно или 0 или 1
0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
28.06.2015, 15:15
Цитата Сообщение от ValeryS Посмотреть сообщение
так в с++ так же
просто он позволяет неявные приведения
В теории это разные типы, они не могут быть кастованы неявно. Вы же не допускаете неявного приведения списка к хеш таблице? То же самое. На приактике же это один и тот же скалярный тип. Дублирование функционала?
Цитата Сообщение от ValeryS Посмотреть сообщение
будем утверждать что char нет?
Это не то же самое. int и char - скалярные типы, они в любом языке могут быть явно или неявно приведены друг к другу.

Добавлено через 46 секунд
Цитата Сообщение от ValeryS Посмотреть сообщение
b будет равно или 0 или 1
и? Не понял к чему это и зачем.
0
306 / 101 / 18
Регистрация: 04.07.2014
Сообщений: 571
28.06.2015, 15:29
Согласно стандарту C++ нет никакого специального "логического типа", который бы мог образовывать алгебру.
Есть специальный целочисленный тип, определяемый посредством отображения двух литералов true и false, а также других целочисленных типов в два значения 0 и 1.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.06.2015, 15:29

Что плохого в 2 partial classes в одном файле?
Приложение запускается правильно, а Конструктор ругается Зачем namespace WindowsFormsApplication9 { public partial class...

Объясните мне, что же такого плохого в goto?
Виталян, открой спойлер! #include &lt;iostream&gt; #include &lt;ostream&gt; using namespace std; int matrix, i, j, a, b, dlin, vis,...

что плохого если я делаю ф-ю main типа void
привет всем, кто может объяснить, что плохого если я делаю ф-ю main типа void ?

При явном приведении к int получаются числа, но явно не те, что должны быть
Привет. Есть массив unsigned char. В него записываются данные с устройства с помощью библиотеки libusb. Изначально прибор передает...

При перекомпиляции сервера перекомпилируется клиент, а что, собственно в этом плохого?
Друзья! Начинаем цикл вопросов про COM- Объекты. Первый вопрос возник по статье Безверхова, вот здесь статья. Вот там такой пример: ...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Жизня: рисунок укладки багажа, сделанный клодом
anaschu 21.08.2026
Сделал 15 снимков, он по снимкам сделал схему.
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru