Почему с типом 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.