发布版本中是否禁用断言?

Are asserts disabled in release build?

'release' 构建中是否禁用断言?

g++-O0-O3-g 等可选标志如何影响它的行为?

来自手册页:

If the macro NDEBUG was defined at the moment assert.h was last included, the macro assert() generates no code

只有在包含 <cassert> 头文件之前定义宏 NDEBUG 时,<cassert> 头文件中的

assert() 才会被禁用。另见这些 docs

使用 gcc/g++,最简单的方法是在调用编译器时在命令行上定义 NDEBUG 宏,如下所示:

g++ -DNDEBUG ... other args...

优化标志和类似标志等参数不会禁用断言。