【发布时间】:2023-04-11 11:27:01
【问题描述】:
从standard,我试图了解表达式最终会是哪种类型:
bool myBool;
[...]
uint8_t(255) * (myBool);
我是否保证myBool 将被转换为uint8_t(又名unsigned char),或者整个结果可能是int?
有用的链接:bool to int conversion
【问题讨论】:
-
一般来说,这是没有意义的。将一个数字乘以
true或false没有意义。就像将数字 42 乘以橙色一样。我建议重新编写一些有意义的东西。让编译器对其进行优化。 -
@ThomasMatthews 我倾向于不同意您的评论:行为在标准中得到了很好的定义。
-
那么一个数字错误相加的语义是什么?请记住,乘法是重复的加法。因此,您将 false 添加到数字中。同样,
true和false是布尔或逻辑属性,而不是数学属性。它们可以映射到 4 和 5 或“frog”和“rover”,但仍然没有意义。这是一个hack。 -
@ThomasMatthews 我不明白你的说法:标准也定义了真假映射...