Значение конструктора по умолчанию для типа bool

Какое значение использует конструктор по умолчанию для типа bool в С++?

Например, запись

int i = int();

гарантирует, что переменная i будет всегда начинаться с 0.

Я предполагаю, что такая процедура инициализации также возможна:

bool b = bool();

Но, к сожалению, я не смог найти нигде, для которого значение такого конструктора bool по умолчанию определено для возврата. Является ли переменная b всегда инициализирована символом false или true.

Ответ 1

false.

В проекте С++ 14 черновик N4296, раздел 8.5 (Инициализаторы), пункт 6, пункт 1 списка и ссылки в нем, и пункт 8, пункт 4 списка.

Ответ 2

bool является интегральным типом, а значение-инициализация должна быть равна нулю.

Ответ 3

Является ли переменная b всегда инициализирована ложным или истинным?

ложь

Преобразование true в тип integer даст 1, а преобразование false приведет к 0 (4.5/4 и 4.7/4)

Очень простой тестовый код

#include<iostream>
int main()
{
  bool b=bool();

  if(!b)
  {
     std::cout<<"b: false";
  }

}

Ответ 4

B также инициализируется нулем.

Ответ 5

bool ведет себя так, как если бы он был объявлен:

enum bool {false,true};

Он является интегральным типом и может быть передан в int как значения 0 и 1 (соответственно), а его значение по умолчанию - false.