为什么在C ++中使用(void)1作为无操作?

时间:2011-11-02 10:56:42

标签: c++ visual-c++ assert noop

我正在审核第三方代码库并查看assert宏的定义:

#define assert( x ) \
     if( !( x ) ) { \
        ThrowException( __FILE__, __LINE__ ); \
     } else \
        ((void)1)

(void)1有什么意义?它比惯用语(void)0更好吗?

2 个答案:

答案 0 :(得分:4)

(void)1(void)0之间没有区别。

答案 1 :(得分:4)

我认为这并不重要(并且会被编译器优化掉)。 <cassert>是标准C ++标头(使用标准<assert.h> C标头),它定义了标准assert宏,因此应用程序不应重新定义它。