【发布时间】:2012-08-15 08:39:03
【问题描述】:
假设我有一个函数:
template <bool stuff>
inline void doSomething() {
if(stuff) {
cout << "Hello" << endl;
}
else {
cout << "Goodbye" << endl;
}
}
我这样称呼它:
doSomething<true>();
doSomething<false>();
它会弹出:
Hello
Goodbye
我真正想知道的是编译器是否完全优化了这个? 当我用true调用模板化函数时,它会创建一个只输出“Hello”并避免if语句和“Goodbye”代码的函数吗?
这对于我刚刚编写的这个巨大的函数非常有用,它应该非常优化并尽可能避免不必要的 if 语句检查。我有一种很好的感觉,至少在带有优化的发布版本中,如果不是在没有优化的调试版本中。
【问题讨论】:
-
在优化方面,您不遵循您的直觉。如果你这样做了,你就完蛋了,因为你会被误导。查看生成的代码有多难?
-
@ablm 仅当您只想要给定构建的一个实现时。一旦选择取决于调用者(这似乎很可能在这里),它就会变得非常丑陋。
-
... 并没有提供超过模板版本的任何好处。
-
@ablm 对不同构建的唯一引用是在最后,他推测编译器可能对模板版本进行的优化。
-
@ablm 实际上,我并不介意调试版本是否也经过优化。这实际上也只是一个关于模板如何工作的问题,而不一定是关于我应该如何最好地处理优化代码的问题。