59 / 5 / 0
Регистрация: 03.11.2015
Сообщений: 104
|
|
1 | |
Какая форма записи вам ближе?27.03.2016, 14:34. Показов 772. Ответов 18
Метки нет (Все метки)
0
|
27.03.2016, 14:34 | |
Ответы с готовыми решениями:
18
Определить какая из точек ближе к центру Определить, какая из точек расположена ближе к а Определить, какая из двух точек находится ближе к оси OX, и какая к оси OY Какая ОС ближе всего к CentOS |
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
|
|
27.03.2016, 14:54 | 2 |
Не по теме: А где опрос? :D Мне - если valid это integer то (2), если bool то (1).
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
27.03.2016, 17:12 | 3 |
если valid это integer то (2), если bool то (1)
0
|
19 / 10 / 0
Регистрация: 01.05.2015
Сообщений: 64
|
|
28.03.2016, 00:59 | 4 |
Всегда (1)
0
|
Почетный модератор
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
|
|
28.03.2016, 15:23 | 5 |
Еще не забывайте про
C++ if( 0 == valid )
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||||||
28.03.2016, 19:25 | 7 | ||||||||||
при проектировании шаблона,
разработчик предполагает работу с определенной группой типов. а не вообще со всеми типами без разбора. соотвественно, если предполагается, что возможные T умеют семантику bool (это - смартпоинтеры, например), тогда и используем семантику bool в противном случае - не используем. правило можно сформулировать так: в записи вида:
либо у него есть оператор вида:
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
28.03.2016, 20:28 | 9 |
запрещает неявное приведение.
без него смартпоинтер смог бы не только участвовать в булевых выражениях, но и привестись к int, например
1
|
castaway
|
28.03.2016, 20:34
#10
|
Не по теме: hoggy, благодарю. Не знал.
0
|
castaway
|
28.03.2016, 21:51
#12
|
Не по теме: DrOffset, благодарю. Открыл для себя новое.
0
|
2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,402
|
|
28.03.2016, 23:00 | 13 |
всегда (1)
0
|
Вездепух
11696 / 6375 / 1724
Регистрация: 18.10.2014
Сообщений: 16,071
|
|
02.04.2016, 22:18 | 14 |
Выражения, имеющие булевскую семантику, независимо от их фактического типа - по первому способу. В частности, функция
std::isalpha используется по первому способу, немотря на то, что имеет тип возврата int . В вашем случае имя переменной намкает на булевскую семантику, т.е. первый вариат выглядит естественнее.Выражения, не имеющие булевской семантики - всегда строго по второму способу, с явным сравнением. Бывают и смешанные варианты, с нечеткой смеантикой (может интерпретироваться и так, и эдак), но они редки. Одной из самых страшных дурных привычек является сравнения типа if (!strcmp(a, b)) , где "позитивная" семантика (равенство строк), выражается через "негативный" оператор логического отрицания. Но у пионерии это почему то считается "круто".Добавлено через 20 минут Приведение объекта a к типу bool в if (a) является неявным и, тем не меене, не запрещается explicit operator bool() . Именно для приведений к типу bool в языке сделано специальное исключение, которое позволяет explicit operator bool() работать в таких контекстах.
1
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||||||
02.04.2016, 22:34 | 15 | ||||||||||
контекстным.
Кликните здесь для просмотра всего текста
0
|
Вездепух
11696 / 6375 / 1724
Регистрация: 18.10.2014
Сообщений: 16,071
|
|
02.04.2016, 22:39 | 16 |
Именно так. Контекстное приведение типа (contextual conversion) является одним из видов стандартного приведения типов (standard conversions). Все стандартные приведения типов - неявны.
1
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
02.04.2016, 22:58 | 18 |
смысл не в том, как это называется/полагается.
а в том, как работает. контекстное bool(expression) - явное преобразование к булю, которое выполняется неявным (не описывается явно самим программистом в исходном коде). по этой причине, explicit его пропускает.
0
|
Вездепух
11696 / 6375 / 1724
Регистрация: 18.10.2014
Сообщений: 16,071
|
|
02.04.2016, 23:06 | 19 |
Совершенно верно. Именно потому я и счел необходимым напомнить, что работоспособность прведения к типу
bool является исключением из общего правила.Старое доброе базовое/общее правило таково: если преобразование описано с ключевым словом explicit , то такое преобразование выполняется только в контексте прямой инициализации. Например, такое преобразование может выполняться через явное применение кастов (ибо их функцинальность определяется через посредство прямой инициализации).Это общее правило, описывающее эффект ключевого слова explicit . Для человека, знакомого только с этим общим правилом, преобразование к bool в if (a) может оказаться неожиданностью, ибо ситуация if (a) под базовое правило не попадает - здесь нет прямой инициализации. Специально для таких ситуаций из базового правила сделаны исключения для некоторых контекстов преобразования к bool и для некоторых контекстов преобразования к другим типам.Вот так это работает.
1
|
02.04.2016, 23:06 | |
02.04.2016, 23:06 | |
Помогаю со студенческими работами здесь
19
Определить, какая из точек В и С расположена ближе к А Какая из точек ближе к центру координат. Определить, какая из точек b,c расположена ближе к а. Какая из точек ближе к началу координат Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |