Как я могу объявить и определить несколько переменных в одной строке с помощью С++?

Я всегда, хотя я объявляю эти три переменные, что все они будут иметь значение 0

int column, row, index = 0;

Но я нахожу, что только индекс равен нулю, а остальные - как мусор, как 844553 и 2423445.

Как инициализировать все эти переменные до нуля без объявления каждой переменной в новой строке?

Ответ 1

int column = 0, row = 0, index = 0;

Ответ 2

Когда вы заявляете:

int column, row, index = 0;

Только индекс установлен на ноль.

Однако вы можете сделать следующее:

int column, row, index;
column = index = row = 0;

Но лично я предпочитаю следующее, что было указано.
На мой взгляд, это более читаемая форма.

int column = 0, row = 0, index = 0;

или

int column = 0;
int row = 0;
int index = 0;

Ответ 3

Как сказал @Josh, правильный ответ:

int column = 0,
    row = 0,
    index = 0;

Вам нужно будет следить за тем же с указателями. Это:

int* a, b, c;

Является эквивалентным:

int *a;
int b;
int c;

Ответ 4

Если вы объявляете одну переменную/объект на строку, она не только решает эту проблему, но делает код более понятным и предотвращает глупые ошибки при объявлении указателей.

Чтобы напрямую ответить на ваш вопрос, вы должны явно инициализировать каждую переменную до 0. int a = 0, b = 0, c = 0;.

Ответ 5

int column(0), row(0), index(0);

Обратите внимание, что эта форма также будет работать с настраиваемыми типами, особенно когда их конструкторы принимают более одного аргумента.

Ответ 6

Возможные подходы:

  • Инициализировать все локальные переменные с нулем.
  • Имейте массив, memset или {0} массив.
  • Сделать глобальным или статическим.
  • Поместите их в struct и memset или создайте конструктор, который будет инициализирован их до нуля.

Ответ 7

Начиная с 2k18 вы можете использовать Structured Bindings:

#include <iostream>
#include <tuple>

int main () 
{
    auto [hello, world] = std::make_tuple("Hello ", "world!");
    std::cout << hello << world << std::endl;
    return 0;
}

Demo

Ответ 8

Я бы не рекомендовал это, но ради окончательной попытки получить некоторую репутацию (и поскольку я не вижу этого решения), вы также можете сделать это:

int row, column, index = row = column = 0;

Ответ 9

Когда вы объявляете переменную без ее инициализации, выбирается случайное число из памяти, и переменная инициализируется этим значением.