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

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

28.06.2015, 12:37. Показов 3749. Ответов 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
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
29.06.2015, 15:24
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от DrOffset Посмотреть сообщение
Поэтому в этом смысле С-совместимость (с которой я, кстати, не спорил) не отменяет слабой типизации С++.
Только Вы путаете причину и следствие. Выдавая следствие за причину и наоборот. Цель - си совместимость, слабость типизации (тоже почему-то именно в этом вопросе, а не в остальных случаях) - следствие. Следовательно bool - костыль. Ненужно.
Цитата Сообщение от DrOffset Посмотреть сообщение
Покажешь мне такие на сигнальном процессоре?
А слона-то Вы решили ненароком не заметить. А вот он:
Цитата Сообщение от castorsky Посмотреть сообщение
char, shot, int, long - это всё один тип - целочисленный
Цитата Сообщение от DrOffset Посмотреть сообщение
Вполне можно написать программу, которая использует факт приводимости к bool в построении своей логики. Таких примеров уйма. Тот же ostream это использует для проверки состояния потока.
Факты применения не относятся к теме разговора. Осветите функциональныю составляющую этого типа в языке. Те возможности, которые он добавляет в язык и те возможности, которые без этого типа нивелируются.
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
29.06.2015, 15:42
Цитата Сообщение от castorsky Посмотреть сообщение
Только Вы путаете причину и следствие. Выдавая следствие за причину и наоборот. Цель - си совместимость, слабость типизации (тоже почему-то именно в этом вопросе, а не в остальных случаях) - следствие.
Пусть так. Только как это влияет на присутствие или отсутствие типа? Ну сделан bool таким для совместимости. Ну унаследовал С++ слабую типизацию от С. Да, сначала унаследовал, потом слабую. Я с этим не спорю и не "не замечаю". Что это меняет-то? В стандарте тип есть, компиляторы его требуют, используется он сейчас уже повсюду.

Цитата Сообщение от castorsky Посмотреть сообщение
char, shot, int, long - это всё один тип - целочисленный
bool тоже в этом списке.

Цитата Сообщение от castorsky Посмотреть сообщение
Следовательно bool - костыль. Ненужно.
Тип есть, но он не нужен. Твое право так думать. Хорошо.

Цитата Сообщение от castorsky Посмотреть сообщение
Те возможности, которые он добавляет в язык и те возможности, которые без этого типа нивелируются.
Твоя попытка притянуть за уши свойства типа bool из Haskell не выдерживают критики. Вообще говоря, можно обойтись одним единственным целочисленным типом, например int. Без short и long прекрасно можно обойтись. И никаких принципиальных возможностей, которые нивелируются их отсутствием, они тоже не добавляют. Только странно делать на основе этого выводы, что будто бы остальные типы не нужны. Так чем bool так провинился?
1
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
29.06.2015, 16:40
Моё imho по этому вопросу
Цитата Сообщение от castorsky Посмотреть сообщение
Это кстати хорошая фишка для любого языка, иметь абсолютный нуль и не иметь самостоятельного булева типа.
Но в крестах есть и абсолютный нуль, и булев тип, ВП. Под абсолютным нулем тут понимается то что всегда ложь, а все остальное - истина. Независимо от типов, как в си, cl, forth.
Цитата Сообщение от DrOffset Посмотреть сообщение
bool тоже в этом списке.
Это печально xD
Цитата Сообщение от DrOffset Посмотреть сообщение
Вообще говоря, можно обойтись одним единственным целочисленным типом, например int. Без short и long прекрасно можно обойтись. И никаких принципиальных возможностей, которые нивелируются их отсутствием, они тоже не добавляют.
Тут Вы недооцениваете положение. Можно и на BrainF* писать. На множестве целочисленных типов определены функции (или операции, кому как удобней). Можно исходить из того что булев тип - подмножество целого, но тогда и множество функций обязано распространяться на этот тип, что противоречит мат аппарату.
Цитата Сообщение от DrOffset Посмотреть сообщение
Так чем bool так провинился?
Да ни чем. Просто лишняя сущность. Мне вообще все равно, просто товарищи начали доказывать какую-то ерунду.
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
29.06.2015, 16:59
castorsky, ладно. Мне твое мнение понятно. Если будем продолжать, то тему придется переносить в другой раздел, а мне бы этого не хотелось.
Будь здоров.
0
 Аватар для Voivoid
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
29.06.2015, 17:58
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
И читать трудно и набирать долго и язык не учили, не знают что 0==false
Просто лол. А разгадка-то проста, байтослесарям лишь относительно недавно завезли тип bool, поэтому они и раскорячивались как могли. А потом уже настолько к этому привыкли, что считают теперь, что это норма. Каргокультисты, что с них взять. Как тут не вспомнить историю про обезьян которых поливали водой при попытке сорвать банан
0
15 / 15 / 3
Регистрация: 04.02.2013
Сообщений: 124
29.06.2015, 18:39  [ТС]

Не по теме:

Ничего себе, топик создал случайно. )))


Нет, все правильно, сравнивать в условии переменную с истиной или ложью смысла большого нет, сам так не делаю (делаю, если не высплюсь))). Но криминала в этом тоже нет. Не называть же человека "не умным" или "не адекватным", из-за того, что он пишет x = x + y вместо x += y. По крайней мере подобные ошибки поправимы, а вот если человек на 2-м курсе не понимает, что такое указатель, то это уже плохо.
0
 Аватар для Fulcrum_013
2083 / 1574 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
30.06.2015, 04:51
Цитата Сообщение от Voivoid Посмотреть сообщение
А разгадка-то проста, байтослесарям лишь относительно недавно завезли тип bool
Ну я ж и говорю - что не дай монкейкодерам из мелкософта из всего придется C# делать.

Добавлено через 4 минуты
Цитата Сообщение от goditsa8 Посмотреть сообщение
а вот если человек на 2-м курсе не понимает, что такое указатель, то это уже плохо.
А для тех кто не понимает что такое указатель после получения диплома и кучи сертификатов разработчика микрософт придумали C#.
Вопрос в том что если человек не понимает как if работает то до понимания что такое указатель... НУ во многом это связано что кодеры микрософта не компилят то что они набирают. Конвейер. аналитики аналитят, блок-схемки малюют, кодеры их кодят, более продвинутые компилят... мало понятно как потом весь этот г-код дебагят... но в конечном итоге как то работает.

Добавлено через 10 минут
Цитата Сообщение от goditsa8 Посмотреть сообщение
из-за того, что он пишет x = x + y вместо x += y
В некоторых случаях только так и работает. к примеру Если есть __property T3DVector Pos у которого есть геттер и сеттер, то Obj.Pos.x+=delta уйдет в никуда, сработает только Obj.Pos.x=Obj.Pos.x+delta;

Добавлено через 4 часа 55 минут
Цитата Сообщение от DrOffset Посмотреть сообщение
Одна приводимость void* к любому указателю неявно чего стоит
Так он для этого и нужен, чтобы лишние явные приведения не городить. А поскольку явно указатель приводится к чему угодно, то без неявного приведения void * - бессмыслица.
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
30.06.2015, 15:47
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
А поскольку явно указатель приводится к чему угодно, то без неявного приведения void * - бессмыслица.
В С++ он неявно не приводится, только в С.
0
 Аватар для Fulcrum_013
2083 / 1574 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
30.06.2015, 23:43
Цитата Сообщение от DrOffset Посмотреть сообщение
В С++ он неявно не приводится, только в С.
Хорошо хоть к void * неявно приводится, а то в нем бы вообще смысла не было.
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
01.07.2015, 08:49
Что плохого в явном написании условия в if?
Ничего.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
01.07.2015, 14:05
Цитата Сообщение от DrOffset Посмотреть сообщение
хотя использование ++ и -- на данный момент является deprecated
Декремент не разрешен вообще для bool.
Цитата Сообщение от mporro Посмотреть сообщение
Получается, что над char и int верны ровно одни и те же конструкции.
Про перегрузку по типу не в курсе?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
 
void f(char)
{
    std::cout << "char\n";
}
 
void f(int)
{
    std::cout << "int\n";
}
 
int main() {
 
    f('a'); // char
    f(42); // int
 
    return 0;
}
C++
1
2
if (a==0) // если a - целое, то вполне нормальное условие.
if (a==false) // если a - целое, то это странное условие, если bool, то лаконичнее будет '!a'
0
306 / 101 / 18
Регистрация: 04.07.2014
Сообщений: 571
01.07.2015, 14:45
Цитата Сообщение от Tulosba Посмотреть сообщение
Про перегрузку по типу не в курсе?
C++
1
2
3
4
5
6
7
8
9
10
11
12
void f(int)
{
    std::cout << "int\n";
}
 
int main() {
 
    f('a'); // int
    f(25); // int
 
    return 0;
}
Какие ещё могут быть вопросы?

Добавлено через 28 минут
Tulosba, перегрузка между char и int говорит о том, что для компилятора это существенно разные слова. И это правильно! Потому что в представлении эти сущности различаются. Указатели char* и int* инвариантны. А вот char и int из друг друга вытекают.
Именно это и есть недостаток нестрогой типизации. Слова-то есть, а типов-то нет.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
01.07.2015, 15:34
Цитата Сообщение от mporro Посмотреть сообщение
Какие ещё могут быть вопросы?
Ты сказал, что
Цитата Сообщение от mporro Посмотреть сообщение
Получается, что над char и int верны ровно одни и те же конструкции.
Я показал, что ты не прав, в общем случае, т.к. язык позволяет различать эти типы.
Цитата Сообщение от mporro Посмотреть сообщение
Указатели char* и int* инвариантны.
Сделай функцию, принимающую void*, и любой указатель для нее будет подходящим.
0
 Аватар для Voivoid
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
01.07.2015, 15:42
Цитата Сообщение от mporro Посмотреть сообщение
Слова-то есть, а типов-то нет.
Вот это уровень экспертизы! У меня просто нет слов
0
306 / 101 / 18
Регистрация: 04.07.2014
Сообщений: 571
01.07.2015, 15:59
Tulosba,
Цитата Сообщение от Tulosba Посмотреть сообщение
язык позволяет различать эти типы.
Нет, различные метки и различные типы -- не одно и тоже.
Тип -- это не просто синтаксическая метка, а такая метка, которая позволяет при синтаксической редукции выражений доказать отсутствие определённого поведения.

Если мы возьмём и переименуем все целые числа в числа-Tulosba, то мы новый тип не определим, мы определим синоним. Нет возможности создать такую конструкцию из чисел-Tulosba, чтобы она оказалась недопустимым поведением для целых чисел, равно как и обратное.

Char -- некоторая синтаксическая метка, с этим никто не спорит. И она нужна С++, потому что за ней скрывается некоторая реализация. Реализация определена в стандарте. Но абстракция объекта char инкапсулирует реализацию. И мы уже char с int как объекты не различаем. Нельзя написать такое выражение, которое было бы осмысленным только для char или было бы осмысленным над другим целочисленным типом, но неопределённым над char.

Цитата Сообщение от Tulosba Посмотреть сообщение
Сделай функцию, принимающую void*
Да. Всё, что осмысленно над void* может быть редуцировано и над другим указателем. Потому все указатели наследуют void*. Но мы легко можем написать выражение, которое имеет ясный смысл для char* и бессмысленно над void*: сложение с единицей, разименование. Потому void* не наследует char*. Таким образом, char* и void* не просто синтаксические метки, но конструкции ограничивающие поведение. Их уже можно называть типами если и не в смысле Пирса, то в смысле Рассела.
0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
01.07.2015, 15:59
Цитата Сообщение от Tulosba Посмотреть сообщение
Про перегрузку по типу не в курсе?
Ваш пример никак не опровергает цитируемое высказывание. Он лишь демонстрирует наличие полиморфных функций, а множество функций над целочисленными типами остается для всех одинаковым, равно как и управляющие конструкции языка будут одинаково валидны для целочисленных типов. О чем товарищ и выразился.
0
 Аватар для Voivoid
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
01.07.2015, 16:17
Лол, так что в итоге-то? А то я что-то не до конца уловил, что, собственно, хотят сказать многоуважаемые господа. Что bool это синоним типа int? Или что?

На всякий случай напомню, что времени, когда приходилось писать typedef int bool прошли
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
01.07.2015, 16:27
castorsky, не вижу смысла спорить с человеком, у которого максимальное кол-во сообщений в ветке "Священные войны"
С 99,9999% вероятностью текущая тема скатится туда же. Тенденция уже очень хорошо прослеживается.
Если кого-то смущают неявные преобразования встроенных типов C++, то у меня два вас как минимум 2 предложения:
- не использовать C++;
- создать пользовательские типы;
И если кто-то выбирает первый вариант, то и обсуждение ведите, пожалуйста, уже в другом разделе форума.
0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
01.07.2015, 19:10
Теперь Ваше нелепое высказываение уже не выглядит нелепым на фоне моей активности в СВ. Всё ясно. Можно продолжить "логические" умозаключения и задаться вопросом: а стоит ли вообще обращать внимание на тех смердов, чья карма меньше? С вероятностью в 99.9999% именно я окажусь как провокатор флуда.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.07.2015, 19:10
Помогаю со студенческими работами здесь

Что плохого в 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- Объекты. Первый вопрос возник по статье Безверхова, вот здесь статья. Вот там такой пример: ...


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

Или воспользуйтесь поиском по форуму:
79
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
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-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru