C ++从int转换为bool

时间:2014-03-19 08:29:41

标签: c++ compilation boolean type-conversion

我想知道 bool-to-int 转换的已编译代码是否包含分支(跳转)操作。

例如,给定void func(bool b)int i

调用func(i)的已编译代码是否等同于func(i? 1:0)的已编译代码?

或者是否有更复杂的方法让编译器在没有分支操作的情况下执行此操作?

更新

换句话说,在跳转到函数地址之前,编译器为了将1或0压入堆栈而生成了什么代码?

我认为它真正归结为手头的CPU架构,而某些特定的处理器(例如某些DSP)可能会支持这一点。所以我的问题是指“传统的”通用CPU(假设这个定义是可以接受的)。

就纯软件而言,问题也可以表述为:当一个整数值不为0时,是否存在将整数值转换为1的有效方式,否则为,而不使用条件语句

由于

1 个答案:

答案 0 :(得分:3)

这不是你的(编译器用户)工作也使内置类型转换有效。如果编译器不是愚蠢的,那么它将使这类事物与CPU表示形式一样接近。

对于大多数商业CPU,bool和int完全相同,if(x) { ... } 转换为bit-anding(或bit-oring,以较快者为准:它们通常是立即指令)x使用自身,如果设置了零标志,则在}之后进行条件跳转。 (并不是说这只是强制零标志计算的一种技巧,这是算术单元电子设备的直接后果)

变体更像是CPU电子设备,而不是代码。所以不要关心它。 if不是由bool触发的,而是由最后一个算术运算结果触发的。

无论CPU持有什么算术运算产生结果,都设置一些表示某些结果属性的标志:如果它为零,如果它产生进位或借位,如果它有奇数或偶数位设置为1等Resut和Flags是两个寄存器,可以从/向内存加载和存储。