我正在学习C ++和java,我已经注意到如果你有条件,如果条件为真,即使你没有明确地写== true
考虑以下非常简单的C ++代码:
bool c_plus_plus_is_cool(){
return true;
}
int main(){
if (c_plus_plus_is_cool()) {
cout << "C++ is cool!";
}
return 0;
}
问:
之间有什么区别 if (c_plus_plus_is_cool())
和if (c_plus_plus_is_cool() == true)
?
在其他语言中也是这种情况(比如Java(我一直在写==true
......))?
答案 0 :(得分:5)
==
运算符返回一个布尔值
如果你已经有一个布尔值,== true
将与原始布尔值没有区别;写作没有意义。
同样,请使用!
运算符代替== false
。
一个例外是C#可空的布尔值,== true
的{{1}}将为false。
答案 1 :(得分:2)
C ++和Java在这一点上都有相同的行为,而== true
只是两种语言中的冗余噪声。
如果到目前为止使用Java中的详细语法,那么这是您自己的私有样式。即使在Java中,这也不是常用和接受/推荐的风格。
答案 2 :(得分:1)
除了== true
带来的语法臃肿之外,实际上没有区别。
答案 3 :(得分:1)
在C / C ++和几乎所有语言中, if 和 while 封装代码块,只有在条件时才会执行真正。明确地将 == true 放入条件语句中是多余的,但有些程序员更喜欢它;它基本上是一种风格选择,不会影响程序的行为或速度。
答案 4 :(得分:1)
它们都是一样的。该语言实现如下条件:
遇到if语句时,请检查条件是否为真。 现在,当我们这样说时,它显然允许你做
==
,这是 编译器/解释器将通过说,数据类型或值来处理它 等于?如果是,则继续进行。
这段代码:
bool c_plus_plus_is_cool(){
return true;
}
int main(){
if (c_plus_plus_is_cool()) {
cout << "C++ is cool!";
}
return 0;
}
与:
相同int main(){
if (c_plus_plus_is_cool() == true) {
cout << "C++ is cool!";
}
return 0;
}
答案 5 :(得分:1)
== true
位于if
或while
(或类似for
或三元运算符之类的内容)时没有区别,特别是如果左侧值已经是bool
类型bool
1}},在你的情况下是。
如果您需要将值显式转换为bool(expr)
,则纯显式转换(==
)看起来要好得多。
唯一的情况是,当奇怪的比较是合理的时,bool
左边的值属于一个具有比较运算符的类,{{1}}作为第二个参数(尽管这通常意味着不好)设计:))。但情况并非如此,因此,在我看来,这样的编码约定绝对没用,而且相当丑陋。
答案 6 :(得分:0)
第二个是坏习惯,会在其他情况下给出错误的答案:
int f() {
return 3;
}
if (f() == true)
std::cout << "Won't get here\n";
if (f())
std::cout << "Will get here\n";