Форум программистов, компьютерный форум, киберфорум
Наши страницы

C++

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

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

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

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

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

как определяется какая форма должна открываться первой? - C++ Builder
как определяется какая форма должна открываться первой? Вернее , что за параметр и где на это влияет?

Какая из точек b или c ближе к a на координатной плоскости - C++
Помогите изменить код так чтоб с функцией было #include <iostream> #include <conio.h> #include <math.h> using namespace std;...

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

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

На плоскости заданы 2 точки, определить какая ближе к началу - C++
помогите сделать этот код с функцией #include <iostream> #include <math.h> using namespace std; int main() { double x1,...

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

18
pav1uxa
1846 / 1698 / 644
Регистрация: 23.01.2014
Сообщений: 6,078
Завершенные тесты: 1
27.03.2016, 14:54 #2

Не по теме:

А где опрос?



Мне - если valid это integer то (2), если bool то (1).
0
hoggy
6703 / 2885 / 494
Регистрация: 15.11.2014
Сообщений: 6,485
Завершенные тесты: 1
27.03.2016, 17:12 #3
если valid это integer то (2), если bool то (1)
0
Wanket
19 / 10 / 0
Регистрация: 01.05.2015
Сообщений: 64
Завершенные тесты: 1
28.03.2016, 00:59 #4
Всегда (1)
0
SatanaXIII
Супер-модератор
Эксперт С++
5620 / 2655 / 247
Регистрация: 01.11.2011
Сообщений: 6,555
Завершенные тесты: 1
28.03.2016, 15:23 #5
Еще не забывайте про
C++
if( 0 == valid )
0
Croessmah
Ушел
Эксперт CЭксперт С++
13554 / 7705 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
28.03.2016, 15:49 #6
Цитата Сообщение от pav1uxa Посмотреть сообщение
Мне - если valid это integer то (2), если bool то (1).
Цитата Сообщение от hoggy Посмотреть сообщение
если valid это integer то (2), если bool то (1)
а если оно "шаблонное"?
0
hoggy
6703 / 2885 / 494
Регистрация: 15.11.2014
Сообщений: 6,485
Завершенные тесты: 1
28.03.2016, 19:25 #7
Цитата Сообщение от Croessmah Посмотреть сообщение
а если оно "шаблонное"?
при проектировании шаблона,
разработчик предполагает работу с определенной группой типов.
а не вообще со всеми типами без разбора.

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

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


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

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

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

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

Цитата Сообщение от hoggy Посмотреть сообщение
либо у него есть оператор вида:
Наверное я чего-то не знаю... А зачем там explicit?
0
hoggy
6703 / 2885 / 494
Регистрация: 15.11.2014
Сообщений: 6,485
Завершенные тесты: 1
28.03.2016, 20:28 #9
Цитата Сообщение от castaway Посмотреть сообщение
explicit?
запрещает неявное приведение.

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

Не по теме:

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

0
DrOffset
7376 / 4453 / 1009
Регистрация: 30.01.2014
Сообщений: 7,304
28.03.2016, 21:48 #11
castaway, explicit у оператора приведения появился с C++11. До этого для того же эффекта использовали идиому safe bool.
2
castaway
28.03.2016, 21:51
  #12

Не по теме:

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

0
Fulcrum_013
699 / 764 / 74
Регистрация: 14.12.2014
Сообщений: 6,036
Завершенные тесты: 3
28.03.2016, 23:00 #13
всегда (1)
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
3945 / 2169 / 553
Регистрация: 18.10.2014
Сообщений: 3,783
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() работать в таких контекстах.
1
hoggy
6703 / 2885 / 494
Регистрация: 15.11.2014
Сообщений: 6,485
Завершенные тесты: 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
0
02.04.2016, 22:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.04.2016, 22:34
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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