Интересно, будут ли две следующие реализации производить одно и то же с одинаковыми характеристиками, какой бы компилятор я ни использовал:
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 хранится в статической константе)?
Большое тебе спасибо.