为什么 MSVC 在 __assume 中使用函数调用时不给出错误?
Why doesn't MSVC give out an error when using function calls in __assume?
当我使用__assume(SomeFunc());
时,它可以很好地编译,即使__assume
应该是一个编译时提示,并且SomeFunc()
不能在编译时预测其返回值。
有人可以解释一下这里发生了什么吗?
SomeFunc()
不能在编译时预测其返回值。
编译器可能无法在编译时计算返回值,但这并不重要。
当你使用__assume(expression)
时,你,程序员,告诉编译器"这个表达式总是计算为true
"。 您为编译器提供了额外的信息,否则它可能无法从源代码中推断出这些信息。
如果表达式在运行时计算时碰巧没有计算结果true
,则行为未定义。 您有责任仅在保证表达式true
的情况下使用 __assume
。
通常,函数可以在编译时预测其返回值。即使不能,__assume
为什么要编译失败呢?这是对优化器的提示。如果它不是一个有用的提示,它不会做任何有用的事情,但没有理由让它失败。
另请注意,__assume
的文档建议在发布模式下将其用于断言。但函数调用通常用于断言。如果不允许__assume
采用函数返回值,则需要两个不同的断言宏。
相关文章:
- 分段错误当我试图运行程序时出错
- .h 和.cpp文件分离时出错,但仅使用 .h 文件时没有错误.我做错了什么?
- 创建 OpenCV 非自由版本 v4.3 时出错,可折叠.cpp错误 C2039、2605
- 制作时出错,C++"db.c:2127:错误:在"||"标记之前应使用";"
- C++语法错误,编译器不会警告或 int v = func(&v) 出错;
- 在VS2015中访问类成员时运行时错误,但在Linux上未访问时出错
- 如何更改路径以修复错误"./main:加载共享库 libmkl_core.so 时出错?
- 为什么在定义类之前声明类的对象会在友元类中给出错误,而在友元函数中不会出错
- 安装 mply 库时出错.致命错误:gsl/gsl_sf.h:没有这样的文件或目录
- Rcpp/C++/R:比较日期时间矢量与日期时间时出错(错误:"运算符>"的不明确重载)
- 编译特征程序时出错:错误:'seq'不是'Eigen'的成员
- 可能的 GCC 链接器错误会导致将弱符号和局部符号链接在一起时出错
- 非标准语法;使用 '&' 创建指向成员的指针错误,将成员函数分配给向量时出错
- 运算符重载时出错(错误:"运算符<<不匹配(操作数类型为"std::basic_ostream<char>"和"const char [2]")
- 编译类 C++ 中的线程时出错(错误 xthread)
- 加载GLEW库时出错(错误LNK2001)
- 通过函数指针调用函数时出错(错误C2064)
- 编译core.obj时出错:错误LNK2001:未解析的外部符号_harmony_core_init
- 链接c++静态库与android ndk时出错(错误:无法识别文件格式)
- 使用GCC编译游戏时出错.(错误:将"Screen"的含义从"class Screen&q