当我使用 __assume(SomeFunc());
时它编译得很好,即使 __assume
应该是一个编译时提示并且 SomeFunc()
无法在编译时预测其返回值。
有人能解释一下这里发生了什么吗?
最佳答案
SomeFunc()
cannot have its return value predicted at compile time.
编译器可能无法在编译时计算返回值,但这没关系。
当您使用 __assume(expression)
时,你,程序员,正在告诉编译器“这个表达式的计算结果总是true
。”您正在为编译器提供额外的信息,否则它可能无法从源代码中推断出这些信息。
如果表达式在运行时计算时碰巧没有计算为 true
,则行为未定义。您有责任仅在表达式保证为 true
时使用 __assume
。
关于c++ - 为什么在 __assume 中使用函数调用时 MSVC 不报错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20894661/