所以,在非类的情况下,我可以做这样的事情:
int val_to_check = 0;
int some_func(int param) {
assert(val_to_check == 0);
return param*param+param;
}
int main() {
printf("Val: %i\n", some_func(rand()));
return 0;
}
如果改为val_to_check
声明const
,则编译器可以折叠该断言。
我很好奇是否可以使用类的成员变量获得类似的常量折叠。例如,我可以执行以下操作:
class Test {
public:
Test(int val) : val_(val) {}
int some_func(int param) {
assert(val_ == 0);
return param*param+param;
}
private:
const int val_;
};
所以在定义类时必须知道 val_,a-la:
Test my_test(0);
printf("Val: %i\n", my_test.some_func(rand()));
(我知道这些都是人为的例子)。似乎有时应该可以将断言折叠起来,但我测试过的简单示例似乎并没有这样做。我得到的最好的是将断言代码移动到函数的末尾(使用 -O3 编译时)