170 похожих чатов

У меня такой вопрос, в случае с указателями в выражении if

(pointer)
pointer как-то неявно приводится к типу bool, из-за чего иногда возникают проблемы, но это "нельзя" убрать из-за того, что это часто используется, наследие и всё такое
я всегда пишу if (pointer != nullptr), и вопрос, есть ли в компиляторах опция, которая делает выражение if (pointer) ошибочным при компиляции?

20 ответов

27 просмотров

к bool он переводится как-то вполне себе явно. если 0 (nullptr) то это false, иначе - true. не понимаю, какого рода проблемы с этим у вас "иногда" возникают? вы в С++ с Java пришли?

такое не только с pointer

Это не приведение к bool это называется вычисление выражения в булевом контексте. Всё, что для данного типа данных не равно нулю становится true, а что равно нулю , становится false. Но формально преобразование к bool не производится, то есть это отдельная система правил в языке. Видишь ли, если тебе это не нравится, то ты должен поискать для себя другой язык программирования, поскольку это не только не отключается, но и составляет важную идеоматическую базу языка (с и с++) , это краткость, это красота, это в некотором роде гибкость. Так что вот так вот.

Alex-Sandrov Автор вопроса
🐈
к bool он переводится как-то вполне себе явно. есл...

это не у меня проблемы, это я тут вычитал, я всегда был на плюсах и ниоткуда не приходил

Alex Sandrov
это не у меня проблемы, это я тут вычитал, я всегд...

Тогда тебе это должно нравится, и всем кто рядом тоже

Alex-Sandrov Автор вопроса
Ilya Zviagin
Это не приведение к bool это называется вычисление...

мне не не нравится, я люблю чёткую типизацию if (bool)

Alex-Sandrov Автор вопроса
Александр Водянников
А это по твоему не четкая, if (pointer) ?

ну по стандарту в if(expr) выражение expr должно иметь тип bool?

Нет, не должно

А с чем сравнивать SomeType?

Alex-Sandrov Автор вопроса
Ilya Zviagin
Нет, не должно

А где написано, что if (expr) expr - не обязательно bool?

Alex-Sandrov Автор вопроса
Dmitriy [Отпуск]
А с чем сравнивать SomeType?

В каком случае? Ну, т.е. мы можем написть для типов операторы преобразования. Но в случае с указателями, получается, что оператор bool есть всегда?

Alex-Sandrov Автор вопроса
Dmitriy [Отпуск]
В случае обобщённого шаблонного кода

О, давайте про шаблоны отдельно поговим потом :)

Alex Sandrov
А где написано, что if (expr) expr - не обязательн...

https://en.cppreference.com/w/cpp/language/implicit_conversion#Contextual_conversions

Alex-Sandrov Автор вопроса
Dmitriy [Отпуск]
Нет, так не пойдёт

Просто я хотел разобраться с простыми примерами сначала

Alex Sandrov
Просто я хотел разобраться с простыми примерами сн...

На "простых" можно предположить что угодно, давайте начнём с актуальных :)

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта