2016-03-03 153 views
0

全部静态成员变量分配时间

当这个变量是c.value计算吗?

编译时间?或运行时?

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; 
} 

它递归地计算价值,但这个值是常量所以在运行时不会改变,那么我认为计算研究是在编译时确定。

是不是正确的想法?

回答

1

因为A是模板参数,所以在编译时计算初始值valuevalue可以是const或不是这个行为

0

形式上,A + foo<A-1, T>::value是一个编译时可评估的常量表达式。

foo<4, int>确实是编译时可评估的,因此对于所有专业领域是value

如果没有const,类型仍然是是编译时可评估的。