C++ Q_ASSERT语句中的代码是否在发布模式下执行?

C++ Q_ASSERT语句中的代码是否在发布模式下执行?,c++,qt,assert,C++,Qt,Assert,根据设计,Q_断言不会导致应用程序在发布模式下失败。我的问题是Q\u ASSERT中的代码是否仍在发布模式下运行 bool assertTest() { int x = 0; Q_ASSERT(++x); return x == 1; } 在发布模式下,assertTest()返回的值是否与在调试模式下返回的值不同?Qt文档 如果在编译期间定义了QT_NO_DEBUG,则Q_ASSERT不会执行任何操作 此外,如果禁用断言,则不执行Q_ASSERT条件 Q\u ASSE

根据设计,
Q_断言
不会导致应用程序在发布模式下失败。我的问题是
Q\u ASSERT
中的代码是否仍在发布模式下运行

bool assertTest()
{
    int x = 0;
    Q_ASSERT(++x);
    return x == 1;
}
在发布模式下,assertTest()返回的值是否与在调试模式下返回的值不同?

Qt文档

如果在编译期间定义了QT_NO_DEBUG,则Q_ASSERT不会执行任何操作

此外,如果禁用断言,则不执行
Q_ASSERT
条件

Q\u ASSERT()
Q\u ASSERT\u X()
,以及
Q\u CHECK\u PTR()
如果 编译期间定义了
QT\u NO\u DEBUG
。由于这个原因 这些宏的参数不应有任何副作用。这是一个
Q\u CHECK\u PTR()的用法不正确


断言表达式中的副作用几乎总是一个错误。在合格代码审查和/或使用静态分析工具时,应标记它们Q_ASSERT做什么并不重要,不管怎样依赖它都是不好的-即使你知道它做什么。

Q_ASSERT是如何定义的?将
bool assertTest()
重命名为
int main()
,然后自己测试它。@Casey-不幸的是,设置一个Qt项目并不像仅仅更改函数名那么简单。当然,这仍然不会花费太多时间,如果没有人知道答案的话,我会这么做。测试这一点肯定比发布一个问题需要更少的时间。这里:我将计时:1:31启动QtCreator,创建新的控制台项目,粘贴代码,点击control-R构建并运行它。@Casey-好吧,如果我没有发布问题,我就不会有代码,所以你必须包括编写代码所花费的时间,尽管时间很短。不管怎样,我发布这个问题主要是为了改进这个维基,为了避免其他人为了找到问题的答案而不得不编写测试项目,我一直在努力寻找明确说明当qmake通过
CONFIG+=DEBUG
时定义
QT\u NO\u DEBUG
的文档。我不能。@cmannett85,我也找不到,但问题的关键不是在发布中是否启用了断言,而是在禁用断言时是否执行条件。
char *alloc(int size) 
{
    char *ptr;
    Q_CHECK_PTR(ptr = new char[size]);  // WRONG
    return ptr; 
}