在 Release 中抛出断言但不调试 - 一定是编译器错误吗?

Assertion thrown in Release but not debug - necessarily a compiler bug?

这不是关于我的代码的具体问题,而是更高级的问题。

我有在发布和调试模式下编译的 C++ 代码(都打开了断言)

库中没有检查调试等的代码(通过预处理器定义或宏)。

运行 在调试模式下不会引起任何断言。 运行 在 Release 或 RelWithDebInfo 中每次都会抛出一个断言。

这是否一定意味着 MSVC compiler/optimiser 中存在错误?此外,更一般地说:Release 和 Debug 之间的程序行为差异是否总是构成编译器中的错误。

注意:clang 运行这段代码很好,没有在发布和调试中抛出断言。

这种事情几乎从来不是编译器错误。如果您的代码由于杂散指针而覆盖数据,则当您使用不同的选项进行编译时,它可能会覆盖不同的数据,从而产生截然不同的结果。