在 Release 中抛出断言但不调试 - 一定是编译器错误吗?
Assertion thrown in Release but not debug - necessarily a compiler bug?
这不是关于我的代码的具体问题,而是更高级的问题。
我有在发布和调试模式下编译的 C++ 代码(都打开了断言)
库中没有检查调试等的代码(通过预处理器定义或宏)。
运行 在调试模式下不会引起任何断言。 运行 在 Release 或 RelWithDebInfo 中每次都会抛出一个断言。
这是否一定意味着 MSVC compiler/optimiser 中存在错误?此外,更一般地说:Release 和 Debug 之间的程序行为差异是否总是构成编译器中的错误。
注意:clang 运行这段代码很好,没有在发布和调试中抛出断言。
这种事情几乎从来不是编译器错误。如果您的代码由于杂散指针而覆盖数据,则当您使用不同的选项进行编译时,它可能会覆盖不同的数据,从而产生截然不同的结果。
这不是关于我的代码的具体问题,而是更高级的问题。
我有在发布和调试模式下编译的 C++ 代码(都打开了断言)
库中没有检查调试等的代码(通过预处理器定义或宏)。
运行 在调试模式下不会引起任何断言。 运行 在 Release 或 RelWithDebInfo 中每次都会抛出一个断言。
这是否一定意味着 MSVC compiler/optimiser 中存在错误?此外,更一般地说:Release 和 Debug 之间的程序行为差异是否总是构成编译器中的错误。
注意:clang 运行这段代码很好,没有在发布和调试中抛出断言。
这种事情几乎从来不是编译器错误。如果您的代码由于杂散指针而覆盖数据,则当您使用不同的选项进行编译时,它可能会覆盖不同的数据,从而产生截然不同的结果。