6

私は次のコードを見ました:

#define QL_REQUIRE(condition,message) \
if (!(condition)) { \
    std::ostringstream _ql_msg_stream; \
    _ql_msg_stream << message; \
    throw QuantLib::Error(__FILE__,__LINE__, \
                          BOOST_CURRENT_FUNCTION,_ql_msg_stream.str()); \
 } else 

これが私たちがそれを使用することを想定している方法です。

void testingMacros1 (){
   double x =0.0;
   QL_REQUIRE (x!=0 ," Zero number !");
}

else結局、特別な使い方があると思います。

質問>elseこのマクロ定義の最後に追加された使用法は何ですか?

ありがとうございました

4

1 に答える 1

10

マクロは状態をチェックします。条件を にする必要がtrueあります。そうしないと、例外がスローされます。それが本当なら、通常のifステートメントのように中かっこを後に置きます。

次のように使用します。

QL_REQUIRE (x != 0, "x must not be 0")
{
    y = 100 / x; //dividing by 0 is bad
}

マクロは条件にサブスクライブし、失敗した場合は、指定されたメッセージを出力します。失敗しない場合は、中かっこまたはワンライナーが else ステートメントを形成します。全体を見ると、論理が少し逆になります。使うときは のようなものifですが、サブするときはifelseが逆の役割を果たします。

それは次のように言っているようなものです。

assert (x != 0 && "x must not be 0");
y = 100 / x; //dividing by 0 is bad
于 2012-05-24T20:01:14.110 に答える