「条件式は整数ではなく、ブール値のみにすることができます」とは何ですか? 平均?私は Java を知りませんし、C++ が何を意味するのかを理解するのに十分ではないことを知っています。 7 サブアイテム 1)
9 に答える
これは、条件にブール値が必要であることを意味します。整数型からの変換は暗黙的ではありません。if (x)
あなたが必要とする代わりにif (x != 0)
、など
前者はC++ で ( 経由で)int
暗黙的に変換されるですが、後者の式はブール値を直接生成します。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) {
// ...
}
これにより、特にnullポインターのテストが非常に一般的であるCやC++などのポインター言語で簡潔なコードが可能になります。ただし、コードを簡潔にしても、必ずしも明確になるとは限りません。C#やJavaなどの高級言語では、条件式として数式を使用することはできません。オブジェクトへの参照が初期化されているかどうかをテストする場合は、次のように記述する必要があります。
if (myObject != null) /* (myObject) alone not allowed */ {
// ...
}
同様に、数式がゼロかどうかをテストする場合は、次のように記述する必要があります。
if (numericalExpression != 0) /* (numericalExpression) alone not allowed */ {
// ...
}
if (someInt)
C++ では、これは基本的に と同等であると言えますif (someInt != 0)
。Java では、2 番目の形式のみが有効です。
次のステートメントを見てください。
if (a > b) {
// Do stuff
}
「条件式」はa > b
. C++では、次のようなことができます
int i = foo();
if (i) {
// do stuff
}
これは、整数 (整数値) が 0 の場合は false、それ以外の場合は true として扱われるためです。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」。
別の言い方をすれば、C / C ++には実際のブール型はなく、整数を使用するだけです。Javaにはそれらがあります-さらに、C /C++よりも厳密な型付けがあります。
式は、値を計算するコードです。どちらの言語でも、式には、この式が生成する値の種類を記述した静的型があります。Integral は、式の型が int であることを意味します。
簡単に言えば、著者は次のそれぞれが正当な C++ コードであることを強調していますが、正当な Java コードではないことを強調していますif
。
if (32) {
}
if (2 * 17 - 33) {
}
int c;
if (c = 12) {
}