(pointer)
pointer как-то неявно приводится к типу bool, из-за чего иногда возникают проблемы, но это "нельзя" убрать из-за того, что это часто используется, наследие и всё такое
я всегда пишу if (pointer != nullptr), и вопрос, есть ли в компиляторах опция, которая делает выражение if (pointer) ошибочным при компиляции?
к bool он переводится как-то вполне себе явно. если 0 (nullptr) то это false, иначе - true. не понимаю, какого рода проблемы с этим у вас "иногда" возникают? вы в С++ с Java пришли?
такое не только с pointer
Это не приведение к bool это называется вычисление выражения в булевом контексте. Всё, что для данного типа данных не равно нулю становится true, а что равно нулю , становится false. Но формально преобразование к bool не производится, то есть это отдельная система правил в языке. Видишь ли, если тебе это не нравится, то ты должен поискать для себя другой язык программирования, поскольку это не только не отключается, но и составляет важную идеоматическую базу языка (с и с++) , это краткость, это красота, это в некотором роде гибкость. Так что вот так вот.
это не у меня проблемы, это я тут вычитал, я всегда был на плюсах и ниоткуда не приходил
Тогда тебе это должно нравится, и всем кто рядом тоже
мне не не нравится, я люблю чёткую типизацию if (bool)
А это по твоему не четкая, if (pointer) ?
ну по стандарту в if(expr) выражение expr должно иметь тип bool?
Нет, не должно
А с чем сравнивать SomeType?
А где написано, что if (expr) expr - не обязательно bool?
В каком случае? Ну, т.е. мы можем написть для типов операторы преобразования. Но в случае с указателями, получается, что оператор bool есть всегда?
В случае обобщённого шаблонного кода
О, давайте про шаблоны отдельно поговим потом :)
Нет, так не пойдёт
https://en.cppreference.com/w/cpp/language/implicit_conversion#Contextual_conversions
Просто я хотел разобраться с простыми примерами сначала
На "простых" можно предположить что угодно, давайте начнём с актуальных :)
Обсуждают сегодня