Je me souviens vaguement avoir lu quelque part que c'est un comportement indéterminé si plusieurs opérandes dans une expression composée de modifier le même objet.
Je pense qu'un exemple de cette UB est indiqué dans le code ci-dessous mais je n'ai compilé sur g++, clang++ et visual studio et tous imprimer les mêmes valeurs et ne suffisent pas à produire des valeurs imprévisibles dans différents compilateurs.
#include <iostream>
int a( int& lhs ) { lhs -= 4; return lhs; }
int b( int& lhs ) { lhs *= 7; return lhs; }
int c( int& lhs ) { lhs += 1; return lhs; }
int d( int& lhs ) { lhs += 2; return lhs; }
int e( int& lhs ) { lhs *= 3; return lhs; }
int main( int argc, char **argv )
{
int i = 100;
int j = ( b( i ) + c( i ) ) * e( i ) / a( i ) * d( i );
std::cout << i << ", " << j << std::endl;
return 0;
}
Ce comportement est-il pas défini ou j'ai en quelque sorte entraîné une description de soi-disant UB qui n'est pas réellement indéfinie?
Je vous serais reconnaissant si quelqu'un pouvait poster un exemple de cette UB et peut-être même m'indiquer où dans la norme C++ qu'il dit qu'il est UB.