Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
59 / 5 / 0
Регистрация: 03.11.2015
Сообщений: 104

Какая форма записи вам ближе?

27.03.2016, 14:34. Показов 1025. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Какая форма записи вам ближе
1
C++
1
if ( !valid )
или

2
C++
1
if ( valid == 0 )
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.03.2016, 14:34
Ответы с готовыми решениями:

Определить какая из точек ближе к центру
Координаты двух точек задаются с экрана требуется определить какая из точек ближе к центру

Определить, какая из точек расположена ближе к а
На оси ОХ расположены три точки а, b, с. Определить, какая из точек b или с расположена ближе к а. Помогите, пожалуйста, написать...

Определить, какая из двух точек находится ближе к оси OX, и какая к оси OY
Написать программу, которая определяет – какая из двух точек, заданных на плоскости своими координатами, находиться ближе к оси OX, и какая...

18
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
27.03.2016, 14:54

Не по теме:

А где опрос? :D



Мне - если valid это integer то (2), если bool то (1).
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
27.03.2016, 17:12
если valid это integer то (2), если bool то (1)
0
 Аватар для Wanket
19 / 10 / 0
Регистрация: 01.05.2015
Сообщений: 64
28.03.2016, 00:59
Всегда (1)
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
28.03.2016, 15:23
Еще не забывайте про
C++
if( 0 == valid )
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
28.03.2016, 15:49
Цитата Сообщение от pav1uxa Посмотреть сообщение
Мне - если valid это integer то (2), если bool то (1).
Цитата Сообщение от hoggy Посмотреть сообщение
если valid это integer то (2), если bool то (1)
а если оно "шаблонное"?
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
28.03.2016, 19:25
Цитата Сообщение от Croessmah Посмотреть сообщение
а если оно "шаблонное"?
при проектировании шаблона,
разработчик предполагает работу с определенной группой типов.
а не вообще со всеми типами без разбора.

соотвественно, если предполагается,
что возможные T умеют семантику bool
(это - смартпоинтеры, например),
тогда и используем семантику bool

в противном случае - не используем.


правило можно сформулировать так:

в записи вида:

C++
1
if(obj) { ... }
obj либо сам является bool,
либо у него есть оператор вида:
C++
1
explicit operator bool()const { return ... ; }
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
28.03.2016, 19:51
Цитата Сообщение от TuxonSch Посмотреть сообщение
Какая форма записи вам ближе
1.

Цитата Сообщение от SatanaXIII Посмотреть сообщение
Еще не забывайте про
Ну хз. Я бы наоборот не советовал.

Цитата Сообщение от hoggy Посмотреть сообщение
либо у него есть оператор вида:
Наверное я чего-то не знаю... А зачем там explicit?
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
28.03.2016, 20:28
Цитата Сообщение от castaway Посмотреть сообщение
explicit?
запрещает неявное приведение.

без него смартпоинтер смог бы не только участвовать
в булевых выражениях,
но и привестись к int,
например
1
28.03.2016, 20:34

Не по теме:

hoggy, благодарю. Не знал.

0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
28.03.2016, 21:48
castaway, explicit у оператора приведения появился с C++11. До этого для того же эффекта использовали идиому safe bool.
2
28.03.2016, 21:51

Не по теме:

DrOffset, благодарю. Открыл для себя новое.

0
 Аватар для Fulcrum_013
2083 / 1574 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
28.03.2016, 23:00
всегда (1)
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12927 / 6795 / 1819
Регистрация: 18.10.2014
Сообщений: 17,193
02.04.2016, 22:18
Выражения, имеющие булевскую семантику, независимо от их фактического типа - по первому способу. В частности, функция std::isalpha используется по первому способу, немотря на то, что имеет тип возврата int. В вашем случае имя переменной намкает на булевскую семантику, т.е. первый вариат выглядит естественнее.

Выражения, не имеющие булевской семантики - всегда строго по второму способу, с явным сравнением.

Бывают и смешанные варианты, с нечеткой смеантикой (может интерпретироваться и так, и эдак), но они редки.

Одной из самых страшных дурных привычек является сравнения типа if (!strcmp(a, b)), где "позитивная" семантика (равенство строк), выражается через "негативный" оператор логического отрицания. Но у пионерии это почему то считается "круто".

Добавлено через 20 минут
Цитата Сообщение от hoggy Посмотреть сообщение
запрещает неявное приведение.
Приведение объекта a к типу bool в if (a) является неявным и, тем не меене, не запрещается explicit operator bool(). Именно для приведений к типу bool в языке сделано специальное исключение, которое позволяет explicit operator bool() работать в таких контекстах.
1
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
02.04.2016, 22:34
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Приведение a к типу bool в if (a) является неявным
контекстным.

C++
1
if (a)
равносильно:
C++
1
if(  bool(a)  )
отсюда иммунитет к приведению к типу bool.

Кликните здесь для просмотра всего текста
5.14 Logical AND operator [expr.log.and]
1 The && operator groups left-to-right. The operands are both contextually converted to bool (Clause 4)
5.15 Logical OR operator [expr.log.or]
1 The || operator groups left-to-right. The operands are both contextually converted to bool (Clause 4).
5.16 Conditional operator [expr.cond]
1 Conditional expressions group right-to-left. The first expression is contextually converted to bool (Clause 4).
4 Standard conversions
4 Certain language constructs require that an expression be converted to a Boolean value. An expression e
appearing in such a context is said to be contextually converted to bool and is well-formed if and only if the
declaration bool t(e); is well-formed, for some invented temporary variable t (8.5).
8.5 Initializers
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12927 / 6795 / 1819
Регистрация: 18.10.2014
Сообщений: 17,193
02.04.2016, 22:39
Цитата Сообщение от hoggy Посмотреть сообщение
контекстным.
Именно так. Контекстное приведение типа (contextual conversion) является одним из видов стандартного приведения типов (standard conversions). Все стандартные приведения типов - неявны.

4 Standard conversions [conv]
1 Standard conversions are implicit conversions with built-in meaning. Clause 4 enumerates the full set of such
conversions.[...]
...
4 Certain language constructs require that an expression be converted to a Boolean value. An expression e
appearing in such a context is said to be contextually converted to bool
1
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
02.04.2016, 22:40
hoggy, только не понятно причем тут &&, ||, ?:, когда для Selection statements есть свой пункт
6.4/4
The value of a condition that is an initialized declaration in a statement other than a switch statement is the
value of the declared variable contextually converted to bool (Clause 4).
...
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
02.04.2016, 22:58
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Именно так. Контекстное приведение типа (contextual conversion) является одним из видов стандартного приведения типов (standard conversions). Все стандартные приведения типов - неявны.
смысл не в том, как это называется/полагается.
а в том, как работает.

контекстное bool(expression) - явное преобразование к булю,
которое выполняется неявным
(не описывается явно самим программистом в исходном коде).

по этой причине, explicit его пропускает.

Не по теме:

Цитата Сообщение от Croessmah Посмотреть сообщение
только не понятно причем тут &&, ||, ?:, когда для Selection statements есть свой пункт
изначально именно его я и хотел его запостить.
но в оглавлении он идет позже,
нежели описание операторов.

а поскольку практический смысл у них у всех монопенисуальный,
то я решил не заморачиваться не листать дальше.

0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12927 / 6795 / 1819
Регистрация: 18.10.2014
Сообщений: 17,193
02.04.2016, 23:06
Цитата Сообщение от hoggy Посмотреть сообщение
смысл не в том, как это называется/полагается.
а в том, как работает.
Совершенно верно. Именно потому я и счел необходимым напомнить, что работоспособность прведения к типу bool является исключением из общего правила.

Старое доброе базовое/общее правило таково: если преобразование описано с ключевым словом explicit, то такое преобразование выполняется только в контексте прямой инициализации. Например, такое преобразование может выполняться через явное применение кастов (ибо их функцинальность определяется через посредство прямой инициализации).

Это общее правило, описывающее эффект ключевого слова explicit.

Для человека, знакомого только с этим общим правилом, преобразование к bool в if (a) может оказаться неожиданностью, ибо ситуация if (a) под базовое правило не попадает - здесь нет прямой инициализации. Специально для таких ситуаций из базового правила сделаны исключения для некоторых контекстов преобразования к bool и для некоторых контекстов преобразования к другим типам.

Вот так это работает.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.04.2016, 23:06
Помогаю со студенческими работами здесь

Какая ОС ближе всего к CentOS
Всем привет Сейчас парюсь с установкой ПО от ОПС на сервера На сайте производителя ОПСа есть дистрибутивы для Linux, FreeBSD, HP-UX,...

Определить, какая из точек В и С расположена ближе к А
написать программу в турбо паскаль на оси ОХ расположены три точки А В С определить какая из точек В и С расположена ближе к А

Какая из точек ближе к центру координат.
Две точки на плоскости заданы, определить, какая из них ближе к центру координат.

Определить, какая из точек b,c расположена ближе к а.
На оси ОХ расположены три точки а, b, с. Определить, какая из точек b,c расположена ближе к а. ОБЪЯСНИТЕ ПОЖАЛУЙСТА)

Какая из точек ближе к началу координат
Даны четыре вещественных числа Xa, Ya, Xb, Yb, являющиеся коррдинатами точек А и В на плоскости. Написать программу, определяющую какая из...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs . . .
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