Почему с типом bool работает оператор new?

Почему код

bool ptr{new bool};
std::cout << ptr;

работает, а код

int ptr{new int};
std::cout << ptr;

не работает?


Ответы (1 шт):

Автор решения: αλεχολυτ

Всё дело в наличии неявного преобразования типа указателя в bool. К new это относится только лишь по той причине, что new возвращает указатель. А так, конечно, не имеет значения каким образом вы этот указатель получите: можно и функцию вызвать, или просто адрес переменной взять через &.

Всё, что неявно преобразуется в bool может быть использовано в условных конструкция: if, for, while. Неявное преобразование указателей в булево значение удобно для проверки наличия объекта (т.к. нулевой указатель nullptr говорит о том, что указываемого объекта нет). А значит проверка вида if (ptr != nullptr) может быть заменена на if (ptr). Такое поведение унаследовалось от Си. Стоит заметить, что в C# или Java такого неявного преобразования нет, и под if должно быть явное булево выражение.

Дополнительно к bool неявно преобразуются любые стандартные скалярные типы: нулевое значение интерпретируется как false, всё остальное как true.

→ Ссылка