我想知道以下两个实现是否会产生完全相同的东西并具有相同的性能,无论我使用什么编译器:
template<class T, unsigned int TSIZE> MyClass1
{
static const unsigned int size_const = 0;
public:
inline void Loop()
{
for(unsigned int i = 0; i < TSIZE; ++i) {
/* DO SOMETHING ON DATA */
}
}
T _data[TSIZE];
};
template<class T, unsigned int TSIZE> MyClass2
{
static const unsigned int size_const = TSIZE;
public:
inline void Loop()
{
for(unsigned int i = 0; i < size_const; ++i) {
/* DO SOMETHING ON DATA */
}
}
T _data[size_const];
};
在第一个中,由于循环中使用的 TSIZE 是一个模板参数,因此几乎可以保证编译器会在需要时展开循环。如果循环在第一种情况下展开,是否会在第二种情况下展开(唯一的区别是 TSIZE 存储在静态常量中)?
非常感谢你。