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 […]
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 […]
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 […]
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?
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 […]
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 […]
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 […]
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, […]
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 […]
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 […]