Логический тип bool и оператор new. Что тут вообще происходит?

Почему компилятор разрешает мне сделать такое:
bool value1 = new bool(true);

Разве оператор new не возвращает указатель на выбранный тип?
Или это какая-то особенность типа bool?

Потому как на запись: int value1 = new int(1); - компилятор ругается.
  • Вопрос задан
  • 356 просмотров
Решения вопроса 1
@TheCalligrapher
У вас в вопросе приведено new-expression, которое возвращает указатель типа bool *. Откуда вы вдруг взяли "указатель на void" - не ясно. New-expression никогда не возвращает "указатель на void".

При этом любой указатель в языке С++ неявно приводим к типу bool. Именно это и используется в вашем примере.

Дополнительно можно заметить, что начиная с С++20 преобразование указателей к типу bool является сужающим (narrowing). Это означает что оно, в частности, больше не будет выполняться неявно в контексте списковой инициализации

bool value1{ new bool(true) }; // Ошибка

Я, правда, не помню навскидку, было ли это изменение в итоге принято как дефект C++17 или как несовместимое изменение языка.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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