c++从int到bool的转换
C++ conversion from int to bool
我想知道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等等。
相关文章:
- 显式 std::exception_ptr 转换为 bool 不存在.VS2010 错误?
- 从标准::字符串到标准::矢量<bool>的快速转换
- 从标准::未来<void>到非标量标准::未来<bool>引发的错误转换
- 如果类对象需要在 C++ 中转换为 int,为什么会调用 "operator bool()"?
- 从nullptr_t转换为bool:有效与否
- 为什么这个GitHub项目将字符串转换为bool
- 我无法将'2D array whit bool'转换为"空 2D 数组布尔值"(用于生命游戏)
- 错误:无法将"dirent*"转换为"search_directories(std::string, std::list<start_tournament_info_t*>&, bool)
- 无法将“ bool”转换为“ gzfile {aka gzfile_s*}”
- 防止在执行时将两个类中的两个对象转换为 bool:if(a!=b)
- C++变体用bool转换构造函数
- 为什么函数向bool存在隐式转换
- Bool 在 'std::rel_ops' 示例中进行强制转换
- 为什么显式 bool() 转换在上下文转换中不发生
- Visual Studio无法在布尔运算的上下文中实例化强制转换运算符模板(T=bool)
- 为什么C/C++会自动将char/wchar_t/short/bool/enum类型转换为int
- 错误 C2440: 'type cast':无法从 'bool' 转换为 'CString'
- C++11 无法将 std::condition_variable::wait 从 'void' 转换为 'bool'
- 为什么显式运算符 bool 允许我转换为任何基元类型
- 将位集数组转换为矢量<bool>