2016-03-03 8 views
0

всестатическое членное время распределения переменных

, когда эта переменная должна быть c.value caculating?

время компиляции? или время выполнения?

template<int A, typename T> 
struct foo 
{ 
    static const T value = A + foo<A-1, T>::value; 
}; 

template<typename T> 
struct foo < 0, T > 
{ 
    static const T value = 0; 
}; 

int main(void) 
{ 

    foo<4, int> c; 
    cout << c.value << endl; 
    return 1; 
} 

это вычислить значение рекурсивно, но это значение константным, не изменяется во время выполнения, а затем я думаю, что это нормально Caculation на время компиляции.

Правильно ли он думает?

ответ

1

Потому что A является параметром шаблона, вычисление значения инициализации value выполняется во время компиляции. value может быть const или не для этого пользователя

0

Формально A + foo<A-1, T>::value - постоянное выражение для оценки времени компиляции.

foo<4, int> действительно поддается анализу и поэтому поэтому является value для всех специализаций.

Без const тип будет еще быть компилируемым.

Смежные вопросы