arh*_*hzu 7 c c++ optimization assert static-assert
考虑一个功能
void f() {
assert(condition);
...
}
Run Code Online (Sandbox Code Playgroud)
在调试模式下,如果启用了断言,则编译器可以自由地假设condition保持,因为如果没有,则不会执行剩余的代码.
但是,在发布模式下,我相信编译器只会看到
void f() {
...
}
Run Code Online (Sandbox Code Playgroud)
而且不能再假设了condition.
是否有任何编译器指令或静态断言技巧让编译器了解某些不变量?
这在便携式C或C++中无法完成.
一些编译器提供了内部函数,例如__assume(用于MSVC)和__builtin_unreachable(用于GCC,ICC和Clang),可用于此目的.
例如:
void f() {
__assume(condition); //For MSVC
/*...*/
}
void f() {
if (!condition) __builtin_unreachable(); //for GCC and Clang
/*...*/
}
Run Code Online (Sandbox Code Playgroud)