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

标签 c++ visual-c++ visual-studio-2013

当我使用 __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/

相关文章:

c++ - 为什么常量变量有时不被视为编译时常量

c++ - 使用来自另一个包的少量 C++ 级代码

c++ - 关于 WEXITSTATUS 与 `G++ 4.9.4` 的奇怪行为

c++ - 在 Visual Studio 2008 Express 中链接 libcURL

c++ - 空引用如何导致代码为 0xc0000005 的 SEH 异常?

c++ - 打印一个函数会返回一个意外的值,为什么?

c++ - 警告 C4003 和错误 C2589 和 C2059:x = std::numeric_limits<int>::max();

c# - Visual Studio 设计器加载失败

azure - 使用 Visual Studio Online 进行发布管理

visual-studio-2012 - Visual Studio 2015-2019 : How do I bring back the old find dialog from VS 2010?