为什么在 C++ 中使用 (void)1 作为无操作?
我正在查看第三方代码库,并看到 assert
宏的定义:
#define assert( x ) \
if( !( x ) ) { \
ThrowException( __FILE__, __LINE__ ); \
} else \
((void)1)
(void)1
有何意义?它比惯用的 (void)0
更好吗?
I'm reviewing a third party codebase and see this definition of an assert
macro:
#define assert( x ) \
if( !( x ) ) { \
ThrowException( __FILE__, __LINE__ ); \
} else \
((void)1)
What's the point in (void)1
? How is it better than idiomatic (void)0
?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
(void)1
和(void)0
之间没有区别。There's no difference between
(void)1
and(void)0
.我认为这并不重要(并且将被编译器优化)。
是一个标准 C++ 标头(使用标准
C 标头),它定义了一个标准assert
宏,因此应用程序不应重新定义它。I think it does not matter that much (and will be optimized away by the compiler). And
<cassert>
is a standard C++ header (using the standard<assert.h>
C header) which defines a standardassert
macro, so an application should not re-define it.