使用 if 语句处理布尔值

Posted

技术标签:

【中文标题】使用 if 语句处理布尔值【英文标题】:Handling Bool Value With an If Statement 【发布时间】:2012-02-09 07:18:34 【问题描述】:

我是一名学生程序员,目前正在使用 Qt 为我的公司设计 GUI,我有一个相当简单的问题,我似乎无法在网络上找到答案。似乎有人曾经问过它,所以如果你知道答案在哪里,我会对参考感到满意。我的问题是;可以使用 if 语句处理 C++ 中的布尔数据类型。所以 bool 值要么是 1 要么是 0,所以你能做这样的事情吗

bool trueOrFalse()

    myclass temp;
    QString tempstr;
    double candidate;
    bool validate;

    tempstr = ui->tableWidgetInjectionLocations->item(i,9)->text();
    candidate = tempstr.toDouble(&validate);
                if(validate == true)
                
                    temp.tempProperty = candidate;
                
                else
                
                    QMessageBox error;
                    error.setText("Error");
                    error.exec();
                
    if (validate == true)
       
       return true;
       
    else
       
       return false;
       

我在这里真正要寻找的是这个布尔函数的最后一部分。当我使用 return 时,我实际上是在返回一个该函数将持有的值,还是我不恰当地使用了关键字 return?一旦验证通过,我希望能够使用该功能来指示是否继续执行另一个功能请保持我的批评建设性。作为一名学生,我只对提高感兴趣。

【问题讨论】:

您可以删除最后一个 if 语句的全部内容,而直接说 return validate;。除此之外,它看起来很合理 - 您按值返回 bool,因此无论如何它都不会被函数“持有” 如果有的话,您认为这段代码有什么问题吗?我发现很难真正理解您的问题。 您所说的“返回此函数将保留的值”是什么意思。要么我不明白你的意思,要么你对 C++ 的工作原理有错误的假设(即函数不保存值)。您可能需要澄清 我有格式的原因 if (validate == true) return true; 否则 返回假; 是因为我原来的 if 语句就像 if (validate1 == true && validate2 == true && validate3 == true && ... 如果我的 validate bools 确实返回 true 我希望数据附加到我已经建立的向量然后给父函数一个值 true;在这种情况下我是否为此设置正确? 【参考方案1】:

您使用return 语句返回的值会在您调用该函数时按字面意思返回。

因此,如果您在程序的其他地方编写此代码:

bool returnValue = trueOrFalse();

那么returnValue 变量将包含一个布尔值,该值等同于trueOrFalse() 函数返回的值。

函数本身并不“保存”值,函数调用者定义了一个变量,该变量将在函数调用完成后保存该值。


至于您的第二个问题,您正在正确使用return 语句,但您可以大大简化trueOrFalse() 函数中的代码。而不是这个:

   if (validate == true)
   
       return true;
   
   else
   
       return false;
   

你只需要这个:

return validate;

因为validate 局部变量已经是bool

这消除了根据布尔常量 (true) 检查布尔值的冗余,从而防止奇怪的错误蔓延并使代码更易于阅读和理解。

事实上,您可以在处理布尔值 (bool) 的任何时候使用这种通用模式。与其将它们与文字 falsetrue 进行比较,不如直接写:

if (validate)  // test for truth

    // do whatever...

if (!validate)  // test for falsity

    // do whatever...

【讨论】:

我有格式的原因 if (validate == true) return true; 否则 返回假; 是因为我原来的 if 语句就像 if (validate1 == true && validate2 == true && validate3 == true && ... 如果我的 validate bools 确实返回 true 我希望数据附加到我已经建立的向量然后给父函数一个 true 值;在这种情况下我是否为此设置正确? 是的,没错。但就像 Blastfurnace 所说,您仍然可以使用简化的语法 (if (validate1 && validate2 && validate3))。它正常工作的原因是因为&& 运算符,它确保所有的情况都是真实的。 if 语句怎么知道我正在寻找的数据是真的呢?是不是因为布尔值都是真的,除非以 ! 为前缀?我还需要 if 语句来声明 trueOrFlase 函数是 true 还是 false bool,以便可以在另一个函数中使用它来决定是否继续。 是的,您总是在 if 声明中检查真相。隐含地,您正在检查validate1 == true 的真实性,因此您可以写(validate1 == true) == true,但这很愚蠢。但同样的模式也适用,允许您将其进一步减少到 validate1! 运算符(“not”运算符)否定你应用它的任何东西,所以它与检查虚假是一样的。 谢谢,你今天不顾一切地帮助了我!我也非常感谢你包容的方式!【参考方案2】:

替换

 if (validate == true)
       
       return true;
       
    else
       
       return false;
       

return validate;

没有理由对其进行测试并返回不同的布尔值。

当你在它的时候,替换以前的

if (validate == true)

if (validate)

【讨论】:

以上是关于使用 if 语句处理布尔值的主要内容,如果未能解决你的问题,请参考以下文章

如何在 if 语句中使用这个布尔值?

为啥这个 if 语句以非布尔值成功?

为啥这个 if 语句不返回布尔值?

布尔值不适用于 If 语句(Javascript)

Java - 与If语句一起使用的布尔值

如何启用我的 html 页面以使用两个布尔字段值检查用户并使用“if”语句显示他们的数据?