簡體   English   中英

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) { ... }轉換為位和(或位oring,以較快者為准:它們通常是立即指令) x with如果設置了零標志,則在}之后進行條件跳轉。 (並不是說這只是強制零標志計算的一種技巧,這是算術單元電子設備的直接后果)

變體更像是CPU電子設備,而不是代碼。 所以不要關心它。 if s不是由bool觸發,而是由最后一個算術運算結果觸發。

無論CPU持有什么算術運算都會產生結果,並設置一些代表某些結果屬性的標志:如果它為零,如果它產生進位或借位,如果它有奇數或偶數位設置為1等.Resut和標志是兩個寄存器,可以從/向內存加載和存儲。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM