Vous pouvez, évidemment, mettre une déclaration variable dans une boucle:Pourquoi ne puis-je pas mettre une déclaration de variable dans la partie test d'une boucle while?
for (int i = 0; ...
et je l'ai remarqué que vous pouvez faire la même chose si et passer des déclarations ainsi:
if ((int i = f()) != 0) ...
switch (int ch = stream.get()) ...
mais lorsque je tente 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 que ce comportement est conforme? Y a-t-il une raison à cela?
EDIT: Je trouve que je peux faire ceci:
while (int ch = stream.get() != -1) ...
mais à cause des règles de priorité, qui est interprété comme:
while (int ch = (stream.get() != -1)) ...
qui est pas ce que je veux.
gcc ne permettez-moi de déclarer une variable dans l'instruction "if" non plus, en fait –
Ne voulez-vous pas dire while (int ch = (stream.get()! = -1)) dans le dernier exemple? –
comme une option pour contourner cela, vous pouvez considérer l'opérateur de virgule: while (int ch, (ch = stream.get())! = -1) {// faire des choses ici} – workmad3