我看过以下代码:
#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的用法是什么?
谢谢
解决方法
宏检查条件.它需要条件为真,否则它将抛出异常.如果这是真的,你会像普通的if语句一样把括号括起来.
你会这样使用它:
QL_REQUIRE (x != 0,"x must not be 0") { y = 100 / x; //dividing by 0 is bad }
条件中的宏潜艇,如果失败,它将打印给定的消息.如果它没有失败,你的大括号或一行代表形成else语句.在查看整个事情时,逻辑有点逆转.当使用它时,它就像一个if,但是当它进入时,if和else之类的角色会被颠倒.
这有点像说:
assert (x != 0 && "x must not be 0"); y = 100 / x; //dividing by 0 is bad