Подтвердить что ты не робот

Почему С++ bool var true по умолчанию?

bool "bar" по умолчанию true, но он должен быть ложным, он не может быть инициализирован в конструкторе. есть способ инициализировать его как false, не делая его статическим?

Упрощенная версия кода:

foo.h

class Foo{
 public:
     void Foo();
private:
     bool bar;
}

foo.c

Foo::Foo()
{  
   if(bar)
   {
     doSomethink();
   }
}
4b9b3361

Ответ 1

Фактически, по умолчанию он не инициализируется вообще. Значение, которое вы видите, - это просто некоторые значения корзины в памяти, которые были использованы для выделения.

Если вы хотите установить значение по умолчанию, вам нужно запросить его в конструкторе:

class Foo{
 public:
     Foo() : bar() {} // default bool value == false 
     // OR to be clear:
     Foo() : bar( false ) {} 

     void foo();
private:
     bool bar;
}

UPDATE С++ 11:

Если вы можете использовать компилятор С++ 11, теперь вы можете использовать конструкцию по умолчанию (большую часть времени):

class Foo{
 public:
     // The constructor will be generated automatically, except if you need to write it yourself.
     void foo();
private:
     bool bar = false; // Always false by default at construction, except if you change it manually in a constructor initializer list.
}

Ответ 2

Ответ на призыв - это место. Чтобы "решить" вашу проблему, вы можете использовать список инициализации конструктора. Я настоятельно рекомендую вам прочитать эту страницу, так как она может прояснить некоторые похожие запросы, которые могут возникнуть в будущем.

Ответ 3

C/С++ не инициализируют переменные для вас вообще. Место памяти, которое теперь используется баром, имеет значение в нем, которое интерпретируется как "истина". Это не всегда так. Вы должны инициализировать его в своем конструкторе.

Ответ 4

Эта программа имеет поведение undefined. Внутренние типы не имеют конструкторов. Вы можете сделать bool bar = bool();, но лучше определить фактическое значение в вашем классе foo.

Ответ 5

Попробуйте следующее:

class Foo
{ 
  public: 
    void Foo(); 
  private: 
     bool bar; 
} 

Foo::Foo() : bar(false)
{
  if(bar) 
  { 
    doSomething(); 
  }
}

Ответ 6

Поскольку вы используете значение bar в ctor, я предполагаю, что вы пытаетесь установить его до создания объекта? Я думаю, вы хотели сделать это статической переменной класса вместо переменной экземпляра.

Ответ 7

Вы можете инициализировать любую переменную при ее объявлении.

bool bar = 0;