次の 2 つの実装は、使用するコンパイラに関係なく、同じパフォーマンスでまったく同じものを生成するのではないかと思います。
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 がテンプレート パラメーターであるため、必要に応じてコンパイラがループを展開することがほぼ保証されます。最初のケースでループが展開された場合、2 番目のケースで展開されますか (唯一の違いは、TSIZE が static const に格納されていることです)。
どうもありがとうございました。