【发布时间】:2015-06-23 06:13:04
【问题描述】:
我看到这样的宏定义:
#define ASSERT_VALID_PARAM(param, assertion) { static_cast<void>(param); if (!(assertion)) { throw InvalidParamError(#param, #assertion, __FILE__, __PRETTY_FUNCTION__, __LINE__); } }
我无法在这里弄清楚static_cast<void>(param) 的需求。
知道为什么需要这样做吗?
【问题讨论】:
-
这应该会有所帮助:cppreference -- static_cast
-
宏应该使用
do...while(0)。 -
@jxh,do..while(0) 用于处理“if(cond) MACRO”之类的用法,其中 MACRO 有多于一行。但是 MACRO 定义中的附加花括号应该可以处理相同的问题。
-
除非它没有。如果没有
do..while(0),添加else是错误的。 -
@jxh,是的,你是对的。感谢您指出这一点。