c++从int到bool的转换

C++ conversion from int to bool

本文关键字:转换 bool int c++      更新时间:2023-10-16

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

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

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

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

更新:

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

我假设这真的归结于手头的CPU架构,并且一些特定的处理器(例如某些dsp)可能支持这一点。所以我的问题是指"传统的"通用cpu(假设这个定义是可以接受的)。

在纯软件方面,问题也可以表述为:是否有一种有效的方法可以在不为0的情况下将整数值转换为1,否则转换为0,而不使用条件语句?

谢谢

让内置类型转换变得高效不是你(编译器用户)的工作。如果编译器不笨,它会使这类东西尽可能接近CPU表示。

对于大多数商用CPU, bool和int是完全相同的,if(x) { ... }将位跳转(或位跳转,无论哪个更快:它们通常是即时指令)x与自身进行转换,如果设置了零标志,则在}之后进行条件跳转。(并不是说这只是一个强制零标志计算的技巧,这是算术单元电子学的直接结果)

变体更多的是CPU电子器件的问题,而不是代码的问题。所以不要在意它。if不是由bool值触发的,而是由最后一次算术运算的结果触发的。

CPU所进行的任何算术运算都会产生一个结果,并设置一些标志来表示某些结果属性:如果它是零,如果它产生进位或借位,如果它的奇数或偶数位被设置为1等等。