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

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

28.06.2015, 12:37. Показов 3774. Ответов 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 / 1574 / 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
3176 / 1935 / 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
3176 / 1935 / 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
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
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
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
28.06.2015, 14:49
Цитата Сообщение от ValeryS Посмотреть сообщение
я правильно понимаю что if (false) сработает
Нет. Реальный код (инверсия условия, например, jz/jnz итд.) будет зависеть от оптимизатора. (Причем, между test и jxx может оказаться еще несколько инструкций).
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
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
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
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
3176 / 1935 / 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
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
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 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru