1

次の IF ステートメントがあり、その意味がわかりません。

if (data->tokens.size()) 
{..
  //reads each token in a for loop and assigns each token to a variable...
}

トークンには 6 つの値があるので、6tokens.size()を返す必要がありますよね?

if 条件が必要な理由がわかりません。私が理解していることから、条件が1tokens.size()を返す場合は true 、 0を返す場合は false になります。

私の場合、6 (または、0 または 1 だけでなく任意の数のトークンの量) を返します。では、この if 条件はどのように機能するのでしょうか?

つまり、0 と 1 以外の値を取得した場合の if の処理方法を知りたいのです。

4

6 に答える 6

5

C および C++ の条件ステートメントは、他に何も指定されていない場合、暗黙的に「0 に等しくない」と比較されます。例えばif (data->tokens.size())​​と同じif (data->tokens.size() != 0)です。

于 2013-04-08T10:38:10.093 に答える
1

if数値ではなく、true または false の bool 式を取ります。幸いなことに、数値を指定すると、ブール値に変換されます。数値が 0 の場合は false、それ以外の場合は true であるため、機能します。

于 2013-04-08T10:39:26.317 に答える
0

空のベクトルを繰り返し処理しないことを確認するのは、空でないことのテストにすぎないと思います

于 2013-04-08T10:39:03.607 に答える
0

ループではなく条件付きです。true の場合は、条件付きブロックに入ります。ゼロの場合は false であり、ブロックに入りません。0 以外の値があれば真であり、ブロックに入ります。

于 2013-04-08T10:39:55.077 に答える
0

より正確に言うと、標準は次のように述べています。

6.4 選択ステートメント

選択ステートメント:

if ( condition ) statement

… 条件の規則は、選択ステートメントと and ステートメントの両方に適用されますfor( while6.5)。… switch ステートメント以外のステートメントで初期化された宣言である条件の値は、文脈的に変換された宣言された変数の値ですbool(節 4)。その変換の形式が正しくない場合、プログラムの形式が正しくありません。… 式である条件の値は、式の値であり、文脈上;に変換されます。boolその変換の形式が正しくない場合、プログラムは形式が正しくありません。

ブール値への変換の意味:

4 標準変換

特定の言語構造では、式をブール値に変換する必要があります。eそのようなコンテキストに現れる式は、何らかの発明された一時変数 t (8.5) に対して、宣言が整形式であるbool場合にのみ、 文脈的に変換され、整形式であると言われます。bool t(e);

これは重要。そのため、この種の「魔法」を行うことができます。

while(getline(cin,str))) cout<<str;

with が適用されますbool(cin)(この場合はgetlinereturn cin))

あなたの例では、変換は次のようになります。

4.12 ブール変換 [conv.bool]

1 算術、スコープなし列挙、ポインター、またはメンバー型へのポインターの prvalue は、 type の prvalue に変換できますbool。ゼロ値、ヌル ポインター値、またはヌル メンバー ポインター値は に変換されfalseます。その他の値は に変換されtrueます。直接初期化 (8.5) では、 type の prvalue を typestd::nullptr_tの prvalue に変換できますbool。結果の値はfalseです。

余談ですがif、あなたの例の はほとんど役に立たないか、コードを難読化するだけである可能性があります。検討:

for (int i=0; i< data->tokens.size(); ++i) 
{..
  //reads a token and assigns to a variable...
}

また:

for( const auto &token : data->tokens)
    {..
      // assigns token to a variable...
    }

どちらの場合も、はを冗長にするfor場合にのみ入ります。size()>0if

于 2013-04-08T11:45:44.877 に答える