1
int x;
if(x = 10){
    //code here
}

Java ではこれは機能しませんが、C++ では機能します。

C++ では、false、NULL、または 0 以外のテスト括弧に入れるものはすべて true と見なされることに気付きました。

例:

boolean x = false;
if(x){
    //code here
}

int x = 0;
if(x){
    //code here
}

if(NULL){
    //code here
}

int x; //uninitalized variable which is null
if(){
    //code here
}

なぜJavaでこれが不可能なのですか?? これを許可しなかった他の言語は何ですか?

4

4 に答える 4

3

その理由は

if (x = 10) {
    // ...
}

Java では許可されていません。これx = 10は整数型の式であり、Java では if 条件のブール式のみが許可されます。C++ では、if 条件として整数を使用できます。これの大きな理由の 1 つは、C との互換性を維持するためです。C にはブール型がないため、if 条件では整数が完全に有効です。

Java が整数の as if 条件を許可しないのはなぜですか? これを行う非常に重要な理由の 1 つは、一般的なバグを止めることです。と書くのが一般的です。

if (x = 10)

本当の意味で

if (x == 10)

実際、これは非常に一般的であるため、多くの C/C++ プログラマーが次のように記述しています。

if (10 == x)

代わりに、偶発的な代入を書くのが難しくなります。

本当に課題を実行するつもりなら、いつでも書くことができます

x = 10;
// ...

は常に非ゼロであるためx = 10、C++ バージョンは常に if に入ります。この方法では、表現力を実際に失うことはありませんが、バグを防ぐことができます。


また、あなたは書く

int x; //uninitalized variable which is null
if () {
    // ...
}

と書くつもりだと思いますif (x)が、それは的外れです。初期化されていない変数は、C、C++、または Java では null ではありません! Java では、初期化されていないローカルを使用することはできません (フィールドは自動的に初期化されます)。そのため、Java で初期化されていない変数を使用することはできません。C/C++ では、初期化されていない変数null になる場合がありますが、その保証はまったくありません。代わりに、初期化されていない変数の値は未定義であり、以前に実行されたコードがスタックに残っている可能性があります。 初期化されていない変数がnullであることに依存しないでください - それは絶対にあなたを噛むために戻ってきます.

于 2012-05-14T19:45:42.650 に答える
0

C++ has different rules for truth evaluation than Java. See this for more information: http://www.cplusplus.com/forum/articles/3483/

于 2012-05-14T19:46:21.617 に答える
0

エラーにつながることが多いからです。

人々は (x == 10) 書きたかったのに (x = 0) 書きました。あなたの場合

if (x = 10) 

なぜifが必要なのですか?RHS が 0 になることができる場合にのみ意味があるので、考えてみましょう

if (x = b) 

C では 0/false になる可能性があります。Java では、次のように記述する必要があります。

x = b;
if (x != 0) 

私はそれなしで生きることができます。短さを見逃すこともありますが、コンパイラが私を止めることもあり、エラーの検索にどれだけの時間を費やすかわかりません。これは実際にはよくあるエラーです - の(str == "foo")代わりに(str.equals (foo)). 理解するのは簡単ですが、人々は間違いを犯します。

于 2012-05-14T21:27:31.310 に答える
0

Java は、型付けが厳密であるという点で C/C++ とは異なります。テスト条件にはブール式が必要です。整数式は、ブール式に自動的に昇格されません。

コンパレータ内の割り当ては引き続き許可されます。たとえば、これは機能します。

if (x = (1 == 1))
{
   ...
}
于 2012-05-14T19:45:45.963 に答える