我可以在C++中将int与布尔值相乘吗?

use*_*063 50 c++ int boolean

我的GUI中有一个显示图表的小部件.如果我有多个图表,GUI上的矩形会显示一个图例.

我有一个QStringlist (legendText)持有传说的文本.如果不需要图例,则为legendText空.如果有传说,legendText则会保留文本.

为了找到图例周围的矩形高度,我想执行以下操作:

 int height = 10;
 QStringList legendText;
 ...
 height = height * (legendText->size() > 0);
 ...
Run Code Online (Sandbox Code Playgroud)

这是一个好主意/好的风格,乘以int一个boolean?我会遇到问题吗?

Tar*_*ama 107

如果有点不清楚,这在技术上很好.

bool将被提升到一个int,因此结果是明确定义的.但是,查看该代码我不会立即获得您想要实现的语义.

我只想写下这样的东西:

height = legendText->isEmpty() ? 0 : height;
Run Code Online (Sandbox Code Playgroud)

这使您的意图更加清晰.

  • 我将它进一步减少到`if(legendText-> empty())height = 0;`.这是写这个的常用方法. (8认同)

Sin*_*all 32

根据标准(§4.5/ 6),它完全没问题:

类型的prvalue bool可以转换为类型的prvalue int, false变为零并true成为一个.

但是,我建议使用isEmpty而不是比较size为零height = height * (!legendText->isEmpty());

或者使用条件运算符作为其他答案建议(但仍然isEmpty代替.size() > 0)


Sur*_*urt 16

您可以使用条件(三元)运算符:

height = ( legendText->size() >0 ) ? height : 0 ;
Run Code Online (Sandbox Code Playgroud)


AyC*_*yCe 11

也许这个?

if(legendText->isEmpty())
{
   height = 0;
}
Run Code Online (Sandbox Code Playgroud)

要么

int height = legendText->isEmpty() ? 0 : 10;
Run Code Online (Sandbox Code Playgroud)

  • 添加`const`就可以了,你就是金色的. (4认同)