web-dev-qa-db-fra.com

Comment déclarer et définir plusieurs variables sur une seule ligne à l'aide de C ++?

Je pense toujours que si je déclare ces trois variables, elles auront toutes la valeur

int column, row, index = 0;

Mais je trouve que seul index est égal à zéro et les autres sont des bric-à-brac comme 844553 & 2423445.

Comment initialiser toutes ces variables à zéro sans déclarer chaque variable sur une nouvelle ligne?

146
Sam
int column = 0, row = 0, index = 0;
182
Josh

Lorsque vous déclarez:

int column, row, index = 0;

Seul l'index est mis à zéro.

Cependant, vous pouvez faire ce qui suit:

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

Mais personnellement, je préfère ce qui suit.
C’est une forme plus lisible à mon avis.

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

ou

int column = 0;
int row = 0;
int index = 0;
136
Matt

Comme @Josh a dit, la bonne réponse est:

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

Vous devrez faire attention à la même chose avec les pointeurs. Cette:

int* a, b, c;

Est équivalent à:

int *a;
int b;
int c;
40
Mateen Ulhaq

Si vous déclarez une variable/objet par ligne, non seulement cela résoudra ce problème, mais cela clarifiera le code et évitera les erreurs stupides lors de la déclaration des pointeurs.

Pour répondre directement à votre question, vous devez initialiser explicitement chaque variable à 0. int a = 0, b = 0, c = 0;.

22
Mark B
int column(0), row(0), index(0);

Notez que cette fiche fonctionnera également avec les types personnalisés, en particulier lorsque leurs constructeurs prennent plusieurs arguments.

15
Michael Kristofik

Approches possibles:

  • Initialise toutes les variables locales avec zéro.
  • Avoir un tableau, memset ou {0} le tableau.
  • Faites-le global ou statique.
  • Mettez-les dans struct et memset ou ayez un constructeur qui les initialise à zéro.
4
Ajay

À partir de 2k18, vous pouvez utiliser 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

3
ivaigult

Je ne le recommanderais pas, mais si vous êtes vraiment intéressé par une ligne et que vous n'écrivez qu'une seule fois, vous pouvez également le faire:

int row, column, index = row = column = 0;
1
Levi Uzodike