Ce qui se passe ici?
if(int a = Func1())
{
// Works.
}
if((int a = Func1()))
{
// Fails to compile.
}
if((int a = Func1())
&& (int b = Func2()))
)
{
// Do stuff with a and b.
// This is what I'd really like to be able to do.
}
La Section 6.4.3 en 2003 standard expains comment les variables déclarées dans une instruction de sélection de la condition ont une portée qui s'étend jusqu'à la fin de la substatements contrôlée par l'état. Mais je ne vois pas où il dit quelque chose au sujet de ne pas être en mesure de mettre des parenthèses autour de la déclaration, ni ne dit rien sur une seule déclaration par l'état.
Cette limitation est ennuyeux, même dans les cas où seulement une déclaration de l'état est nécessaire. Considérez ceci.
bool a = false, b = true;
if(bool x = a || b)
{
}
Si je veux entrer dans le "si"corps-portée avec x défini à false, alors la déclaration doit parenthèse (puisque l'opérateur d'affectation a priorité plus basse que le OU logique), mais depuis que la parenthèse ne peut pas être utilisée, elle a besoin d'une déclaration de x à l'extérieur du corps, de fuite de cette déclaration pour une plus grande portée que ce qui est désiré. Évidemment, cet exemple est trivial, mais de façon plus réaliste, ce serait le cas où a et b sont des fonctions retournant des valeurs qui doivent être testés
Donc est ce que je veux faire de la non-conforme à la norme, ou est-ce mon compilateur juste casse les couilles (VS2008)?