7

=!その代わりに誤って入力!=してしまい、しばらくの間検出されなかったシステムに大きなバグが発生しました。それ以来、私はそれを修正しましたが、何をするのか興味が=!あります。

私はこのようなものを持っていました

void foo(int param)
{
    int a = 0;

    ... 

    if (a =! param)
    {
        // never got here even when `a` was not equal to `param`  
    }
    ...
}

if上記のステートメントが評価しているものを誰か説明できますか?

4

6 に答える 6

29

この式:

a =! param

!paramに値を割り当てますa!paramboolean コンテキストで評価される param の否定バージョンです。

代入演算子は右辺の値を返すため、true の場合は本体if (a = !param)も実行します。if!param

于 2013-01-09T03:58:38.987 に答える
12

それは単一の=!オペレーターではありません。と=!代入と否定です。

if (a = !param)、または

a = !param;

if (a) {

}
于 2013-01-09T03:58:55.057 に答える
7

=!演算子ではありません。これは=(代入) 演算子と!(ブール否定) 演算子です。

だからあなたは持っていif (a = !param)ます。割り当ては割り当ての値を返すため、基本的には次のようになります。

a = !param;
if (a) {
   ...
于 2013-01-09T03:58:50.770 に答える
5

複数のトークンである可能性があると考える場合、効果は単純なはずです。

if (a = !param)
于 2013-01-09T03:59:02.730 に答える
1

=! オペレーターではありません。このように理解できます。a にオペランド b を代入するステートメントがあるとしa=!bますが、ここでは、b を a に代入する前にツイストがあり、オペランド b の前に ! を付けて b の状態を逆にしています。これは基本的に論理否定演算子です。

于 2016-04-03T07:39:06.360 に答える