gpt4 book ai didi

c++ - 定义 NDEBUG 时删除断言是否在内联函数之前发生?

转载 作者:行者123 更新时间:2023-11-30 02:28:18 24 4
gpt4 key购买 nike

对于上面的例子,我试图弄清楚 increment 方法是否真的会被内联。如果在我定义 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

最佳答案

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

关于c++ - 定义 NDEBUG 时删除断言是否在内联函数之前发生?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40885174/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com