2016-03-03 177 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,類型仍然是是編譯時可評估的。