在定义NDEBUG之前删除断言是在内联函数之前发生的吗?

时间:2016-11-30 09:54:36

标签: c++ compilation conditional-compilation

对于上面的例子,我试图弄清楚增量方法是否实际上是内联的。如果在我定义NDEBUG标志时编译器将删除断言,则增量方法将变为单行,因此实际内联的概率将增加。 所以问题归结为删除断言并由编译器做出内联决策的顺序。

#ifndef Example_h__
#define Example_h__
#include <cassert>

class A
{
private:
    int m_value = 0;

public:
    void increment();
};

inline void A::increment()
{
    ++m_value;
    assert(m_value < 100);
}

int main()
{
  A a;
  a.increment();
}

#endif

1 个答案:

答案 0 :(得分:3)

assert是一个宏,因此在编译器看到任何结果代码之前由预处理器处理。