[英]Describe the memory consumption of this metaprogram
我在一本關於元編程的書中找到了這個工作代碼 -
template<unsigned long N>
struct binary
{
static unsigned const value = binary<N/10>::value *2 + N%10;
};
template<>
struct binary<0>
{
static unsigned const value = 0;
};
int main()
{
unsigned x = binary<101010>::value;
cout << x;
}
我的問題是 - 分配value
的內存在哪里? 是否在數據段上分配?
此外,該書還說這段代碼導致了一系列模板實例化,它們以類似於遞歸的方式計算結果。 這是否意味着每個模板實例化,在數據段上分配新的unsigned
?
value
沒有定義。 這樣的靜態數據成員只能以不要求它們具有地址的方式使用(它們不能被使用 )。 它們的值將被內聯,就好像你unsigned x = 42;
。
當然, 編譯器必須以某種方式實例化所有模板特化並計算binary<101010>::value
。 但是編譯完成后再也沒關系了。
如果你使用一個好的C ++編譯器,任何地方都不會分配任何內存。 C ++編譯器將完全優化掉這個類,並在任何使用它的代碼中直接使用計算出的常量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.