Articles of comportement indéfini

32 bits non signés se multiplient sur 64 bits entraînant un comportement indéfini?

J’ai donc à propos de ce code: uint32_t s1 = 0xFFFFFFFFU; uint32_t s2 = 0xFFFFFFFFU; uint32_t v; … v = s1 * s2; /* Only need the low 32 bits of the result */ Dans tous les cas suivants, je suppose que le compilateur ne pouvait avoir aucune idée préconçue sur la plage de s1 […]

Aucun avertissement ou erreur (ou échec d’exécution) lorsque la contravariance entraîne une ambiguïté

Tout d’abord, rappelez-vous qu’une Ssortingng .NET est à la fois IConvertible et IConvertible . Considérons maintenant le code très simple suivant: //contravariance “in” interface ICanEat where T : class { void Eat(T food); } class HungryWolf : ICanEat, ICanEat { public void Eat(IConvertible convertibleFood) { Console.WriteLine(“This wolf ate your CONVERTIBLE object!”); } public void Eat(ICloneable […]

Pourquoi les expressions constantes ont-elles une exclusion pour un comportement non défini?

Je faisais des recherches sur ce qui est permis dans une expression de base constante * , qui est traitée dans la section 5.19 Expressions constantes, paragraphe 2 du projet de norme C ++ : Une expression conditionnelle est une expression constante de base sauf si elle implique l’une des expressions suivantes en tant que […]

Code avec comportement indéfini en C #

En C ++, il existe de nombreuses manières d’écrire du code qui comstack, mais donne un comportement indéfini (Wikipedia) . Y a-t-il quelque chose de similaire en C #? Peut-on écrire du code en C # qui comstack, mais a un comportement indéfini?

Avec C ++ 11, est-ce un comportement indéfini pour écrire f (x ++), g (x ++)?

Je lisais cette question: Comportement non défini et points de séquence et plus précisément, la réponse C ++ 11 , et je comprends l’idée de “séquençage” des évaluations. Mais – est-ce que le séquençage est suffisant lorsque j’écris: f(x++), g(x++); ? Autrement dit, suis-je assuré que f() obtient la valeur d’origine de x et que […]

Le dépassement d’entier entraîne-t-il un comportement indéfini en raison d’une corruption de mémoire?

J’ai récemment lu que le dépassement d’entier signé en C et C ++ provoquait un comportement indéfini: Si, lors de l’évaluation d’une expression, le résultat n’est pas défini mathématiquement ou ne figure pas dans la plage des valeurs représentables pour son type, le comportement n’est pas défini. Je suis en train d’essayer de comprendre la […]

En C ++ 11, est-ce que `i + = ++ i + 1` présente un comportement indéfini?

Cette question a été soulevée pendant que je lisais (les réponses à) Alors, pourquoi i = ++ i + 1 est-il bien défini en C ++ 11? Je suppose que l’explication subtile est que (1) l’expression ++i renvoie une lvalue mais que + prend des valeurs comme opérandes, donc une conversion de lvalue en valeur […]

Est-ce un bogue d’optimisation du compilateur ou un comportement indéfini?

Nous avons un bug ennuyant que je ne peux pas expliquer autour de ce morceau de code: unsigned char bitmap[K_BITMAP_SIZE] = {0} ; SetBit(bitmap, K_18); // Sets the bit #18 to 1 for(size_t i = 0; i < K_END; ++i) { if(TestBit(bitmap, i)) // true for 18 { size_t i2 = getData(i); // for 18, […]

Std :: memcpy est-il un comportement indéfini entre différents types sortingvialement copiables?

J’utilise std::memcpy pour contourner les aliasings ssortingcts depuis longtemps. Par exemple, inspecter un float , comme ceci : float f = …; uint32_t i; static_assert(sizeof(f)==sizeof(i)); std::memcpy(&i, &f, sizeof(i)); // use i to extract f’s sign, exponent & significand Cependant, cette fois, j’ai vérifié le standard, je n’ai rien trouvé qui le valide. Tout ce que […]

Le comportement indéfini est-il un problème uniquement si vous effectuez un déploiement sur plusieurs plates-formes?

La plupart des conversations autour du comportement non défini (UB) expliquent comment certaines plates-formes peuvent le faire, ou certains compilateurs le font. Que faire si vous êtes seulement intéressé par une seule plate-forme et un seul compilateur (même version) et que vous savez que vous les utiliserez pendant des années? Rien ne change mais le […]