Инициализация массива C ++ не работает - PullRequest
8 голосов
/ 30 августа 2010

Я пытаюсь инициализировать массив bools следующим образом:

bool FcpNumberIsOk[MAX_FCPS]={true};

, но когда я отлаживаю его, я вижу только инициализированный первый элемент массива, остальные ложные.Как это может быть так?Я использую Qt в Ubuntu 10, и инициализация выполняется в локальном массиве внутри метода.

Хорошо, спасибо за ваши ответы.

Ответы [ 5 ]

10 голосов
/ 30 августа 2010

Вы неправильно поняли. Похоже, что вы, что любые не упомянутые элементы будут инициализированы к тому же значению, что и последнее явно инициализированное значение. Последнее значение, которое вы упомянули, было true, поэтому все остальные элементы также будут инициализированы как true. Когда-то у меня было такое же убеждение, но я быстро научился иному.

Это не так, как это работает. Любые не упомянутые элементы инициализируются по умолчанию, что для bool означает false.

Чтобы установить все элементы на true, попробуйте что-то вроде std::fill_n:

std::fill_n(FcpNumberIsOk, MAX_FCPS, true);
9 голосов
/ 30 августа 2010

Потому что так работает инициализация массива в C ++. Если вы не указали явно значение для каждого элемента, этот элемент по умолчанию равен нулю (или, здесь, false)

 bool FcpNumberIsOk[MAX_FCPS]={true, true, true, true /* etc */ };

Обратите внимание, что

 bool FcpNumberIsOk[MAX_FCPS];

Устанавливает все значения в ложь или устанавливает их случайным образом в зависимости от того, где это определено.

2 голосов
/ 30 августа 2010

Это ожидаемое поведение.Первый элемент инициализируется указанным значением, а остальные инициализируются значением по умолчанию 0:

int c[5] = {1};

// 1 0 0 0 0
for(int i = 0; i < 5; ++i)
  std::cout << c[i] << ' ';
0 голосов
/ 30 августа 2010

Используя этот синтаксис, вы инициализируете только первый элемент (с вашим значением, а другие получают default-one [false]), но не другие.Вы должны использовать либо массив int и memset, либо цикл for для инициализации всех элементов.

0 голосов
/ 30 августа 2010

Поскольку вы явно инициализировали только первый элемент массива, инициализируется только первый элемент, а остальные нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...