Pourquoi ne puis-je pas mettre une variable dans la déclaration de la portion d'une boucle while?

Vous pouvez, bien évidemment, de mettre une déclaration de variable dans une boucle for:

for (int i = 0; ...

et j'ai remarqué que vous pouvez faire la même chose en si et instructions de commutation:

if ((int i = f()) != 0) ...

switch (int ch = stream.get()) ...

Mais quand j'essaie de faire la même chose dans une boucle while:

while ((int ch = stream.get()) != -1) ...

Le compilateur (VC++ 9.0) ne l'aime pas du tout.

Est ce comportement conforme? Est-il une raison pour cela?

MODIFIER: j'ai trouvé que je peux faire ceci:

while (int ch = stream.get() != -1) ...

mais en raison de règles de priorité, c'est interprétée comme:

while (int ch = (stream.get() != -1)) ...

qui n'est pas ce que je veux.

gcc ne me laisse pas déclarer une variable dans l'instruction "if", soit, en fait
Ne pas vous dire tout (int ch = (flux de données.get() != -1)) dans le dernier exemple?
comme une option pour contourner ce problème, vous pouvez envisager l'opérateur virgule: while (int ch, (ch = stream.obtenez de l'()) != -1) {//faire des trucs ici}
oui, bien sûr. modifiés en conséquence.
Seulement pour if et switch. Voir aussi Pourquoi pas "alors que la déclaration avec initialisation"?

OriginalL'auteur Ferruccio | 2008-10-10