【问题标题】:Why use (void)1 as a no-op in C++?为什么在 C++ 中使用 (void)1 作为空操作?
【发布时间】:2011-12-20 05:17:01
【问题描述】:

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

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

(void)1 有什么意义?它比惯用的(void)0 好在哪里?

【问题讨论】:

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


【解决方案1】:

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

【讨论】:

  • @iammilind:问题是“[(void)1] 比惯用的(void)0 更好吗?”我回答了。不是,没有区别。
  • @iammilind:我不确定是否有任何见解可以提供。提问者已经知道他们是无操作的。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2011-01-13
    • 2012-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-01
    • 2011-08-20
    相关资源
    最近更新 更多