【发布时间】:2013-02-13 01:04:32
【问题描述】:
阅读维基百科Optimizing C++,在this paragraph有以下建议:
如果整数值在应用程序代码中是常量,但在库代码中是变量,则将其设为模板参数。
所以如果我有这样的功能
void myfunction(int param)
{
switch(param)
{
case 1:
do_something_1();
break;
case 2:
do_something_2();
break;
...
case 100: // 100 is taken as example
do_something_100();
break;
}
}
换成下面这样方便吗?
template<int param> void myfunction()
{
switch(param)
{
case 1:
do_something_1();
break;
case 2:
do_something_2();
break;
...
case 100: // 100 is taken as example
do_something_100();
break;
}
}
还是完全没有必要?你能解释一下原因吗?
【问题讨论】:
-
如果编译器在编译时就知道“param”的值,它可能会完全去掉这个开关,只保留可以到达的代码。
-
不是很有用。如果它是一个常量,你让编译器内联代码,我猜结果会是一样的。
-
你提到的那个页面上已经给出了原因。如果整数值在应用程序代码中是常量,但在库代码中是变量,则将其设为模板参数。