为什么在 __assume 中使用函数调用时 MSVC 不报错?

ula*_*ade 1 c++ visual-c++ visual-studio-2013

当我使用__assume(SomeFunc());它时,它编译得很好,即使__assume它应该是编译时提示并且SomeFunc()无法在编译时预测其返回值。

有人能解释一下这里发生了什么吗?

Jam*_*lis 6

SomeFunc()无法在编译时预测其返回值。

编译器可能无法在编译时计算返回值,但这并不重要。

当您使用 时__assume(expression)(程序员)告诉编译器“该表达式的计算结果始终为true”。您向编译器提供了额外的信息,否则它可能无法从源代码中推断出这些信息。

如果表达式true在运行时计算时恰好没有计算结果,则行为未定义。__assume您有责任仅在保证表达式出现的地方使用true