假设我有一个模板类:
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
)时,零可以/将被优化掉(任何加零都保持不变)计算。
换句话说,当启动模板类的实例时,整数模板参数是否会在启动时被视为参数或常量。
答案 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
。