将整数零模板参数优化出来
Will integer zero template parameter be optimized out?
假设我有一个模板类:
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
)时,零是否可以/将被优化掉(任何加零的东西都保留自己)。
换句话说,当模板类的实例被启动时,整数模板参数在启动时会被视为参数或常量吗。
<foo>
的值是多少,gcc肯定会完全优化加法。使用-O2
,当<foo>
为零时,getValue()
方法在具有32位int
类型的x86上生成以下汇编语言:
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
。
相关文章:
- const-ref传递的模板化参数是否经过优化,以便在足够小时按值传递
- 解析参数后内联以优化算法速度
- 未优化的 constexpr 的未定义引用用作默认参数
- 传递成员作为参数函数到优化器(将成员函数传递给函数)
- 优化了标签(空结构)函数参数的处理
- 多个函数需要相同的参数(如何优化)
- 使用通过引用(通过指针)传递的参数优化 OpenCL 函数中的指针访问
- 为什么传递值参数经常使编译器更容易进行代码优化
- c++ 编译器优化是否可以针对布尔参数生成两个版本的函数
- 优化开关(x),x是作为参数传递的常量数
- Opencv 中的 SVM 参数优化
- 是否可以将addr2line与使用发布优化参数编译的应用程序一起使用
- 如何不指定函数参数的精确求值顺序有助于C&C++编译器生成优化的代码?
- 将整数零模板参数优化出来
- 当函数参数是常量引用临时或按值复制的临时时,为什么 MSVC 优化会破坏 SSE 代码
- 如何优化代码中的参数
- 使用非类型模板参数C++优化
- C++ 对返回其参数的函数模板进行编译器优化
- C++编译器是否根据模板参数优化模板方法
- C++:未使用参数优化的力度