什么'条件表达式只能是布尔值,而不是整数.' 意思?

Rel*_*lla 4 c++ java boolean integral conditional-expressions

什么'条件表达式只能是布尔值,而不是整数.' 意思?我不知道Java,我知道C++ deffenetly不应该强调它意味着什么..请帮助(在比较C++和Java项目中找到http://www.javacoffeebreak.com/articles/thinkinginjava/comparingc++andjava.html 7子项目1)

GMa*_*ckG 7

这意味着您需要一个条件的布尔值,来自整数类型的转换将不是隐式的.而不是if (x)你需要if (x != 0)

前者是int隐式转换为boolC++(via != 0)的,但后者的表达式直接产生布尔值.


pyo*_*yon 6

条件和循环控制结构使用条件表达式来确定程序的控制流.

// conditional control structure
if (conditionalExpression) {
    codeThatRunsIfConditionalExpressionIsTrue();
} else {
    codeThatRunsIfConditionalExpressionIsFalse();
}

// basic loop control structure
while (conditionalExpression) {
    codeThatRunsUntilConditionalExpressionIsFalse();
}

// run-at-least-once loop control structure
do {
    codeThatRunsAtLeastOnceUntilConditionalExpressionIsFalse();
} while (conditionalExpression);
Run Code Online (Sandbox Code Playgroud)

从逻辑的角度来看,条件表达式本质上是布尔值(true或false).但是,某些语言(如C和C++)允许您使用数字表达式甚至指针作为条件表达式.当非布尔表达式用作条件表达式时,它们将隐式转换为零比较.例如,你可以写:

if (numericalExpression) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

这意味着:

if (numericalExpression != 0) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

这使得简洁的代码,尤其是在指针语言,如C和C++,在测试空指针是相当普遍的.但是,使代码简洁并不一定能使它更清晰.在C#或Java等高级语言中,不允许使用数字表达式作为条件表达式.如果要测试是否已初始化对象的引用,则必须编写:

if (myObject != null) /* (myObject) alone not allowed */ {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

同样,如果要测试数值表达式是否为零,则必须编写:

if (numericalExpression != 0) /* (numericalExpression) alone not allowed */ {
    // ...
}
Run Code Online (Sandbox Code Playgroud)