2

以下の C++ コード スニペットを検討してください。

...

if (false == func()) // Line #1
{
 ...
 ...
}

int func()
{
 ...
  {
     ...
     return false;
  }
 ...

 return true;
} 

上記のコード スニペットでは、 function のプロトタイプはfunc()、整数を返すことを示しています。ただし、関数内では、またはのいずれかfunc()を返します。falsetrue

また、1 行目では、関数の戻り値がfunc()ブール値に対してチェックされます。

このような使い方で問題ないか教えていただきたいです。何らかの問題がある場合は、どのような修正を行う必要があるかをお勧めします。

4

4 に答える 4

8

問題はありません。ゼロ以外の整数は に変換されtrue、ゼロは に変換されますfalse。逆に、 aboolは に変換できinttrueto1およびfalseに変換できます0

ただし、ブール値を比較するときにそれほど冗長である必要はありません。

if (!func()) { .... }

もちろん、あなたの例のように、関数がtrueorのみを返す場合は、直接false返すのが理にかなっていboolます:

bool func();
于 2013-07-02T06:15:13.780 に答える
2

スタンダードから

4.7 整数変換

宛先タイプが bool の場合は、4.12 を参照してください。ソース タイプが bool の場合、値 false は 0 に変換され、値 true は 1 に変換されます。

4.12 ブール変換 [conv.bool]

算術、スコープなし列挙、ポインター、またはメンバー型へのポインターの prvalue は、bool 型の prvalue に変換できます。ゼロ値、NULL ポインター値、または NULL メンバー ポインター値は false に変換されます。その他の値は true に変換されます。std::nullptr_t 型の prvalue は bool 型の prvalue に変換できます。結果の値は false です。

于 2013-07-02T06:20:41.710 に答える
1

内部funcでは、boolあなたが供給したものは返品用に変換されintます。falseに変換され0trueに変換され1ます。

比較では、定数はvalue で にfalse変換されます。int0

通常、いずれかを選択すると、コードが読みやすくなります。bool型全体を使用するか、int型と値を使用します0

于 2013-07-02T07:40:47.227 に答える
0

関数 func() では、ソースの型が bool で、宛先の型が int であるため (関数の戻り値の型が int であるため)、値 false はゼロに変換され、値 true は値 1 に変換されます。宛先タイプ。この int は、1 行目に戻ると自動的に bool に変換されるので、func は 1 または 0 を返すことができるため、値 0 は false になり、1 は true になります。func がゼロ以外の値を返した場合、1 行目で自動的に true に変換されます。

このウェブサイトの「整数変換」および「ブール変換」のセクションを確認してください。

確かに、このタイプの使用法には問題はありませんが、特にコードがより複雑になり、このコードを作成していない他の誰かが保守する必要がある場合は、簡単に読めないと言わざるを得ません。なぜ単純に func return bool にしないのですか?

于 2013-07-02T06:29:38.613 に答える