簡體   English   中英

我可以在C ++中將int與布爾值相乘嗎?

[英]Can I multiply an int with a boolean in C++?

我的GUI中有一個顯示圖表的小部件。 如果我有多個圖表,GUI上的矩形會顯示一個圖例。

我有一個QStringlist (legendText) ,它包含圖例的文本。 如果不需要圖例, legendText將為空。 如果有一個圖例, legendText會保存文本。

為了找到圖例周圍的矩形高度,我想執行以下操作:

 int height = 10;
 QStringList legendText;
 ...
 height = height * (legendText->size() > 0);
 ...

intboolean相乘是一個好主意/好的風格嗎? 我會遇到問題嗎?

如果有點不清楚,這在技術上很好。

bool被提升為 int ,因此結果是明確定義的。 但是,查看該代碼我不會立即獲得您想要實現的語義。

我只想寫下這樣的東西:

height = legendText->isEmpty() ? 0 : height;

這使您的意圖更加清晰。

根據標准(§4.5/ 6),它完全沒問題:

bool類型的prvalue可以轉換為int類型的prvalue, false變為零, true變為1。

但是,我建議使用isEmpty而不是將size與zero height = height * (!legendText->isEmpty());

或者使用條件運算符作為其他答案建議(但仍使用isEmpty而不是.size() > 0

您可以使用條件(三元)運算符:

height = ( legendText->size() >0 ) ? height : 0 ;

也許這個?

if(legendText->isEmpty())
{
   height = 0;
}

要么

int height = legendText->isEmpty() ? 0 : 10;

有些人可能會發現以下信息很有用(下面的代碼應該在每個時鍾周期都很重要的高性能程序中考慮,這里的目的是展示替代技術,我不會在這種特殊情況下使用它)。

如果你需要沒有分支的快速代碼,你可以使用按位運算符實現int乘法與布爾值。

bool b = true;
int  number = 10;
number = b*number;

可以優化為:

number = (-b & number);

如果btrue-b-1 ,所有位都設置為1 否則所有位都為0
布爾NOT( !b )可以通過XOR'ing b1b^1 )來實現。
所以在你的情況下我們得到以下表達式:

height = (-(legendText->isEmpty()^1) & height);

暫無
暫無

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

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