簡體   English   中英

什么'條件表達式只能是布爾值,而不是整數。' 意思?

[英]What does 'Conditional expressions can be only boolean, not integral.' mean?

什么'條件表達式只能是布爾值,而不是整數。' 意思? 我不知道Java,我知道C ++ deffenetly不應該強調它意味着什么..請幫助(在比較C ++和Java項目中找到http://www.javacoffeebreak.com/articles/thinkinginjava/comparingc++andjava.html 7子項目1)

這意味着您需要一個條件的布爾值,來自整數類型的轉換將不是隱式的。 而不是if (x)你需要if (x != 0)等。

前者是一個int ,它將在C ++中隱式轉換為bool (通過!= 0 ),但后一個表達式直接產生一個布爾值。

條件和循環控制結構使用條件表達式來確定程序的控制流。

// 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);

從邏輯的角度來看,條件表達式本質上是布爾值(true或false)。 但是,某些語言(如C和C ++)允許您使用數字表達式甚至指針作為條件表達式。 當非布爾表達式用作條件表達式時,它們將隱式轉換為零比較。 例如,你可以寫:

if (numericalExpression) {
    // ...
}

這意味着:

if (numericalExpression != 0) {
    // ...
}

這允許簡潔的代碼,尤其是在諸如C和C ++的指針語言中,其中對空指針的測試非常普遍。 但是,使代碼簡潔並不一定能使它更清晰。 在C#或Java等高級語言中,不允許使用數字表達式作為條件表達式。 如果要測試是否已初始化對象的引用,則必須編寫:

if (myObject != null) /* (myObject) alone not allowed */ {
    // ...
}

同樣,如果要測試數值表達式是否為零,則必須編寫:

if (numericalExpression != 0) /* (numericalExpression) alone not allowed */ {
    // ...
}

在C ++中,你可以說if (someInt)基本上等於if (someInt != 0) 在Java中,只有第二種形式是合法的。

采取聲明:

if (a > b) {
    // Do stuff
}

“條件表達式”是a > b 在C ++中,你可以做類似的事情

int i = foo();
if (i) {
    // do stuff
}

這是因為積分(整數值)在0時被視為假,否則為真。 像Java這樣的語言不允許您以這種方式將整數視為布爾值。

積分表達式:

int i = 5;
if(i) {
  //...
}

//In C/C++, if(i) gets implicitly converted to if(i != 0), Java doesn't do this for you.

布爾表達式

int i = 5;
if(i==5) {
  //...
}

//This will work in Java

在C / C ++中你可以做到

int i = 5;
if( i ) { ...}

在Java中你不能因為我必須是一個布爾值

這意味着,在Java中,布爾值“true”不能與整數值“1”互換(或者更准確地說,與任何非零整數互換),並且布爾值“false”不能與整數互換值“0”。

表達式是計算值的代碼。 在這兩種語言中,表達式都有一個靜態類型,用於描述此表達式產生的值的類型。 積分意味着表達式的類型是int。

簡單地說,作者強調以下每一個都是合法的C ++代碼,但不是合法的Java代碼,因為if的表達式產生一個整數:

if (32) {

}

if (2 * 17 - 33) {

}

int c;
if (c = 12) {

}

換句話說:C / C ++沒有真正的布爾類型,它們只使用整數。 Java確實擁有它們 - 而且,它的輸入比C / C ++更嚴格。

暫無
暫無

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

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