|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
|||||||||||
Приведение более широких целочисленных к bool может не считаться сужением/усечением?25.08.2017, 10:33. Показов 3325. Ответов 49
Метки нет (Все метки)
clang
Разное поведение при выставленных флагах: clang++.exe -O2 -Wextra-tokens -pedantic-errors -pedantic -Werror -Weverything -Wall -pthread -std=c++1zОК:
0
|
|||||||||||
| 25.08.2017, 10:33 | |
|
Ответы с готовыми решениями:
49
Недопустимое приведение bool к bool
Приведение целочисленных типов переменных |
|
17 / 16 / 3
Регистрация: 18.08.2017
Сообщений: 54
|
|
| 25.08.2017, 11:40 | |
|
Boolean conversions [conv.bool]
A prvalue of arithmetic, unscoped enumeration, pointer, or pointer to member type can be converted to a prvalue of type bool. A zero value, null pointer value, or null member pointer value is converted to false; any other value is converted to true. For direct-initialization, a prvalue of type std::nullptr_*t can be converted to a prvalue of type bool; the resulting value is false.
0.50
|
|
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
|
| 25.08.2017, 12:37 [ТС] | |
|
Этот ответ не отвечает на заданный вопрос.
0
|
|
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
| 25.08.2017, 14:11 | |
|
daslex,
Думаю такое приведение не должно считаться "сужающим", вот почему: Под сужением как правило подразумевается потеря данных которое может иметь существенное значение с точки зрения данных. Например если short-у присвоить значение int, т.к int может содержать большее число чем short, это может привести к потери данных. Поэтому компиляторы в этом случае выдают соответствующее предупреждение(в случае с флагом -Werror, ошибку компиляции). Теперь разберёмся, что такое bool: Две константы, true == 1, false == 0. Все что не 0, является true. Когда вы присваиваете bool-у int значение которого не равно нулю, оно интерпретируется как true(1). И в конечном счёте пофиг что там может быть потенциальная потеря данных в результате преобразования. Эти данные не имеют для нас никакого значения в контексте приведения к bool. Нас интересует результат(либо true, либо false). Думаю хотя бы по этой причине такой код должен компилироваться без ошибок. Вот выдал вам компилятор предупреждение о сужении при приведении к bool, что дальше? Что будете делать с этой информацией на практике? Главное узнать результатом будет true или false, остальное нас не интересует.
0
|
|
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
|||
| 25.08.2017, 14:22 [ТС] | |||
|
int не может содержать больше чем bool? Добавлено через 2 минуты
0
|
|||
|
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
|
||
| 25.08.2017, 14:29 | ||
|
Преобразование в bool не является сужющим, но не потому, что "...", а по определению.
0
|
||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
| 25.08.2017, 14:32 | |
|
daslex,
int как жил в памяти так и останется жить. Приведение одного типа к другому сохраняет исходное значение... У вас два примера. Второй должен приводить к ошибкам(warning без флага -Werror, или ошибку компиляции если этот флаг установлен). Если вы считаете что первый пример должен приводить к ошибкам, то покажите плиз это на rextester.com. Я скомпилил с вашими флагами на clang, ошибок не было.
0
|
|
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
||
| 25.08.2017, 14:49 [ТС] | ||
0
|
||
|
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
|
|
| 25.08.2017, 15:13 | |
|
0
|
|
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
|
| 25.08.2017, 15:58 [ТС] | |
|
bool integer types == целочисленный тип, что не так?
0
|
|
|
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
|
||
| 25.08.2017, 16:12 | ||
|
0
|
||
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
|
| 25.08.2017, 16:18 [ТС] | |
|
Я вижу у Вас integral и в стандарте integer. Слова я различаю.
Добавлено через 2 минуты Синонимом для термина «целочисленный тип» служит термин «целый тип» (integer type). bool - целый тип. Не могу понять Вас совсем, avgoor.
0
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||
| 25.08.2017, 16:58 | |||
0
|
|||
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
|
| 25.08.2017, 17:06 [ТС] | |
|
Я понимаю, что он пишет, я не понимаю, что он имеет в виду. Потому что даже в цитате, которую он даёт, написано не integral, а integer.
С чего вдруг слово integer, написанное в стандарте, становится словом integral в русском сегменте?
0
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
| 25.08.2017, 17:13 | |
|
0
|
|
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
|||||||||||
| 25.08.2017, 17:31 [ТС] | |||||||||||
|
Ясно. Спасибо.
Но его ответ не отвечает на мой вопрос и в фантазиях меня зря обвиняет. OK:
0
|
|||||||||||
|
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
|
|
| 25.08.2017, 18:23 | |
|
daslex, В цитате которую я привел написано, что bool, ..., и integer type вместе называются integral. В этой цитате отдельно упоминается bool, отдельно integer types. Вместе bool и integer называются integral. Как это разжевать вам подробнее, я не знаю.
Далее в стандарте еще есть сноска, что не существует signed, long и short bool. Патамушта short (при объявлении) - сокращение от short int. long = long int и т.д. int - сокращение от integer. Поэтому, везде где нельзя поставить int - это не integer type. Добавлено через 8 минут UPD: я знаю про extended integer types.
0
|
|
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
|
| 25.08.2017, 18:30 [ТС] | |
|
avgoor, Я понял.
А теперь можно ответ на мой вопрос, из-за которого я создал тему, узнать?
0
|
|
|
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
|
||
| 25.08.2017, 18:31 | ||
.Правило преобразования в bool определяется другим параграфом: "4.12 Boolean conversions", и к narrowing conversion отношения не имеет.
0
|
||
| 25.08.2017, 18:31 | |
|
Помогаю со студенческими работами здесь
20
Приведение переменной типа istream к bool При каком характерном размере d малый участок волновой поверхности может считаться плоским Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут
Суть:
- Группа наркоманов из 10 человек.
- Только один инфицирован ВИЧ.
- Колются одной иглой.
- Колются раз в день.
- Колются последовательно через. . .
|
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
|
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
|
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . .
а удачный момент так и не приходит.
|
|
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица.
Задача: зафиксировать три левых колонки в отчете.
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
/ / . . .
|
Настройки VS Code
Loafer 13.04.2026
{
"cmake. configureOnOpen": false,
"diffEditor. ignoreTrimWhitespace": true,
"editor. guides. bracketPairs": "active",
"extensions. ignoreRecommendations": true,
. . .
|
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2.
Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива.
Было так:. . .
|
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: реализовать контроль корректности заполнения дат назначения. . .
|