【发布时间】:2015-10-31 05:21:55
【问题描述】:
这样写代码有意义吗?
template<bool X>
double foo(double x){
return (X) ? moo(x) : bar(x);
}
我知道有更好的方法来实现这个例子,但我想知道,假设编译器将识别死代码并将其实例化为一般来说是否安全
double foo<true>(double x){return moo(x);}
double foo<false>(double x){return bar(x);}
【问题讨论】:
-
回答“如何”可能有点乏味,但编译器肯定会按照您的期望进行。这绝对是基本的优化。
-
@Columbo 所以这个问题要么太琐碎要么太宽泛;)但是,我对答案很满意
-
这里的优化和模板关系不大——编译器如果能看到
b的值,也会优化inline double foo(bool b, double x) { return b ? moo(x) : bar(x); }。 -
@TravisGockel 是的,但我更喜欢让它在代码中可见,只有一半会被编译
-
@tobi303 我知道您来自哪里,但实际上并非如此。条件运算符的两边都被编译了——它们只是碰巧在大多数时候都得到了优化。如果您要无法编译(如:编译器只能看到
moo(x)或bar(x),具体取决于X),您可以使用其他技术。如果这是您想要的,我可以提供一个更详细的示例。