【发布时间】:2016-02-13 21:50:14
【问题描述】:
考虑这段代码,用gcc 和-Ofast 编译:
int f1(const char *p) {
if (!p[0])
return 0;
f2(); //not inlined
if (p[0]) { //not optimized out
//do something
return 0;
} else {
//do something else
//not optimized out
return 1;
}
}
如何获得优化第二个测试和较低分支的行为(因为 p[0] 是 const 并且已经过测试)?
【问题讨论】:
-
const与优化没有太大关系。 -
@M.M. const 告诉编译器对变量做出假设,这有助于在编译期间进行优化选择。但我可以承认,这不是它的主要目的。
-
@cdcdcd:恐怕您的声明仅适用于定义为
const限定的对象,不适用于定义为指向const对象的指针。