整数零模板参数会被优化掉吗?

时间:2015-03-26 10:03:10

标签: c++ templates

假设我有一个模板类:

template <int foo>
class Bar {
private:
    int data[10];

public:
    int getValue(int index) {return data[index + foo];}
    ...
}
Bar<0>  bar;
// Codes to fill bar's data[] here ...
int retValue = bar.getValue(2);

由于模板参数为零,当我声明bar时,我想知道当数据索引(即index + foo)时,零可以/将被优化掉(任何加零都保持不变)计算。

换句话说,当启动模板类的实例时,整数模板参数是否会在启动时被视为参数或常量。

1 个答案:

答案 0 :(得分:1)

无论常量<foo>的值如何,gcc肯定会完全优化该加法。使用-O2 getValue()方法在int为零时,在x86上使用32位<foo>类型生成以下汇编语言:

  Bar<0>  bar;
// Codes to fill bar's data[] here ...
  return bar.getValue(2);
}
   e:   8b 44 24 10             mov    0x10(%esp),%eax
  12:   c9                      leave  
  13:   c3                      ret    

要查看自己的汇编语言,请使用-g编译翻译单元,并在目标文件上使用objdump -S