2 ms·
Well there's the so-called usual arithmetic conversions that will basically convert every uint16_t to an unsigned int. The C and C++ languages do a silent conve
by kccqzy 2y ago
Well there's the so-called usual arithmetic conversions that will basically convert every uint16_t to an unsigned int. The C and C++ languages do a silent conversion on your back anyways so you might as well make it explicit.
- inetknght 2y agoA well-configured C++ compiler will error-out on such a silent conversion.
- kccqzy 2y agoThe C++ compiler is required to perform this silent conversion according to the standard: https://en.cppreference.com/w/cpp/language/implicit_conversion#Integral_promotion https://en.cppreference.com/w/cpp/language/implicit_conversi...
- loeg 2y agoUsually promotions are to signed int, not unsigned. (With some exceptions. But every uint16_t value can fit in int.)
- Filligree 2y agoUnless int is 16-bit. Code like this is potentially UB; you should use int32_t as the target.
- kevin_thibedeau 2y agoYou should use long, and don't ever assume it's exactly 32-bits. The fixed size types are often an overused crutch that hampers future portability.
- loeg 2y agoThere are no mainstream 16-bit int platforms. It's fine to know what you target. The promotions that are really surprising are from uint64_t bitfields to int (because it's based on value representability). struct { uint64_t a : 33, b : 15; } s; // s.b gets "promoted" to int, s.a does not