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

C++

Войти
Регистрация
Восстановить пароль
 
TuxonSch
57 / 3 / 0
Регистрация: 03.11.2015
Сообщений: 104
#1

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

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

Какая форма записи вам ближе
1
C++
1
if ( !valid )
или

2
C++
1
if ( valid == 0 )
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.03.2016, 14:34     Какая форма записи вам ближе?
Посмотрите здесь:

какая из точек расположена ближе к началу координат (if) - C++
Даны две точки A(x1,y1) и B(x2,y2). Написать программу, которая определяет, какая из точек расположена ближе к началу координат. Данные...

Найти какая из точек ближе к началу координат - C++
В чем ошибка? #include <iostream> #include <conio.h> #include <math.h> using namespace std; void main() { ...

Определить, какая из двух последних точек расположена ближе к первой - C++
Кто разбирается в "Тернарных операторах"?Помогите с задачей на С++. Только нужно именно при помощи "Тернарного оператора" её решить. На...

Какая из точек находится ближе к началу координат: составить алгоритм - C++
Даны две точки А(х1, у1) и В(х2, у2). Составить алгоритм (ГРАФИЧЕСКОЕ ОПИСАНИЕ !!!!!!!!!!!!!!) для определения, какая из точек находится...

Определить какая из точек ближе всего лежит к началу координаты - C++
Заданы 3 точки р1(х1,у1),р2(х2,у2),р3(х3,у3).Определить какая из точек ближе всего лежит к началу координаты.

Определить какая из точек ближе всего лежит к началу координат - C++
Помогите решить задачи. 1)Заданы 3 точки р1(х1,у1),р2(х2,у2),р3(х3,у3).Определить какая из точек ближе всего лежит к началу...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
pav1uxa
1786 / 1626 / 621
Регистрация: 23.01.2014
Сообщений: 5,881
Завершенные тесты: 1
27.03.2016, 14:54     Какая форма записи вам ближе? #2

Не по теме:

А где опрос?



Мне - если valid это integer то (2), если bool то (1).
hoggy
6369 / 2587 / 452
Регистрация: 15.11.2014
Сообщений: 5,724
Завершенные тесты: 1
27.03.2016, 17:12     Какая форма записи вам ближе? #3
если valid это integer то (2), если bool то (1)
Wanket
19 / 10 / 0
Регистрация: 01.05.2015
Сообщений: 64
Завершенные тесты: 1
28.03.2016, 00:59     Какая форма записи вам ближе? #4
Всегда (1)
SatanaXIII
Супер-модератор
Эксперт С++
5593 / 2627 / 240
Регистрация: 01.11.2011
Сообщений: 6,461
Завершенные тесты: 1
28.03.2016, 15:23     Какая форма записи вам ближе? #5
Еще не забывайте про
C++
if( 0 == valid )
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
28.03.2016, 15:49     Какая форма записи вам ближе? #6
Цитата Сообщение от pav1uxa Посмотреть сообщение
Мне - если valid это integer то (2), если bool то (1).
Цитата Сообщение от hoggy Посмотреть сообщение
если valid это integer то (2), если bool то (1)
а если оно "шаблонное"?
hoggy
6369 / 2587 / 452
Регистрация: 15.11.2014
Сообщений: 5,724
Завершенные тесты: 1
28.03.2016, 19:25     Какая форма записи вам ближе? #7
Цитата Сообщение от Croessmah Посмотреть сообщение
а если оно "шаблонное"?
при проектировании шаблона,
разработчик предполагает работу с определенной группой типов.
а не вообще со всеми типами без разбора.

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

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


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

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

C++
1
if(obj) { ... }
obj либо сам является bool,
либо у него есть оператор вида:
C++
1
explicit operator bool()const { return ... ; }
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
28.03.2016, 19:51     Какая форма записи вам ближе? #8
Цитата Сообщение от TuxonSch Посмотреть сообщение
Какая форма записи вам ближе
1.

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

Цитата Сообщение от hoggy Посмотреть сообщение
либо у него есть оператор вида:
Наверное я чего-то не знаю... А зачем там explicit?
hoggy
6369 / 2587 / 452
Регистрация: 15.11.2014
Сообщений: 5,724
Завершенные тесты: 1
28.03.2016, 20:28     Какая форма записи вам ближе? #9
Цитата Сообщение от castaway Посмотреть сообщение
explicit?
запрещает неявное приведение.

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

Не по теме:

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

DrOffset
6917 / 4110 / 940
Регистрация: 30.01.2014
Сообщений: 6,906
28.03.2016, 21:48     Какая форма записи вам ближе? #11
castaway, explicit у оператора приведения появился с C++11. До этого для того же эффекта использовали идиому safe bool.
castaway
28.03.2016, 21:51
  #12

Не по теме:

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

Fulcrum_013
661 / 729 / 72
Регистрация: 14.12.2014
Сообщений: 5,698
Завершенные тесты: 3
28.03.2016, 23:00     Какая форма записи вам ближе? #13
всегда (1)
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
3637 / 1912 / 503
Регистрация: 18.10.2014
Сообщений: 3,480
02.04.2016, 22:18     Какая форма записи вам ближе? #14
Выражения, имеющие булевскую семантику, независимо от их фактического типа - по первому способу. В частности, функция std::isalpha используется по первому способу, немотря на то, что имеет тип возврата int. В вашем случае имя переменной намкает на булевскую семантику, т.е. первый вариат выглядит естественнее.

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

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

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

Добавлено через 20 минут
Цитата Сообщение от hoggy Посмотреть сообщение
запрещает неявное приведение.
Приведение объекта a к типу bool в if (a) является неявным и, тем не меене, не запрещается explicit operator bool(). Именно для приведений к типу bool в языке сделано специальное исключение, которое позволяет explicit operator bool() работать в таких контекстах.
hoggy
6369 / 2587 / 452
Регистрация: 15.11.2014
Сообщений: 5,724
Завершенные тесты: 1
02.04.2016, 22:34     Какая форма записи вам ближе? #15
Цитата Сообщение от 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
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
3637 / 1912 / 503
Регистрация: 18.10.2014
Сообщений: 3,480
02.04.2016, 22:39     Какая форма записи вам ближе? #16
Цитата Сообщение от 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
Croessmah
Модератор
Эксперт CЭксперт С++
12980 / 7292 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
02.04.2016, 22:40     Какая форма записи вам ближе? #17
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).
...
hoggy
6369 / 2587 / 452
Регистрация: 15.11.2014
Сообщений: 5,724
Завершенные тесты: 1
02.04.2016, 22:58     Какая форма записи вам ближе? #18
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Именно так. Контекстное приведение типа (contextual conversion) является одним из видов стандартного приведения типов (standard conversions). Все стандартные приведения типов - неявны.
смысл не в том, как это называется/полагается.
а в том, как работает.

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

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

Не по теме:

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

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

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.04.2016, 23:06     Какая форма записи вам ближе?
Еще ссылки по теме:

Определить, какая из двух точек расположена ближе к заданной точке - C++
Задача: На числовой оси расположены три точки: A, B, C. Определить, какая из двух последних точек (B или C) расположена ближе к A, и...

Среда разработки (какая удобнее Вам?) - C++
Интересует чем лучше пользоваться на Elementary Os? К какой среде проще найти документацию? Чем сами пользуетесь?

На оси ОХ расположены три точки a, b, c. Определить какая из точек b, c расположена ближе к а. - C++
На оси ОХ расположены три точки a, b, c. Определить какая из точек b, c расположена ближе к а.

Написать программу, которая определяет, какая из точек расположена ближе к началу координат - C++
9 Даны две точки A(x1,y1) и B(x2,y2). Написать программу, которая определяет, какая из точек расположена ближе к началу координат. Данные...


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

Или воспользуйтесь поиском по форуму:
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
3637 / 1912 / 503
Регистрация: 18.10.2014
Сообщений: 3,480
02.04.2016, 23:06     Какая форма записи вам ближе? #19
Цитата Сообщение от hoggy Посмотреть сообщение
смысл не в том, как это называется/полагается.
а в том, как работает.
Совершенно верно. Именно потому я и счел необходимым напомнить, что работоспособность прведения к типу bool является исключением из общего правила.

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

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

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

Вот так это работает.
Yandex
Объявления
02.04.2016, 23:06     Какая форма записи вам ближе?
Ответ Создать тему
Опции темы

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