2014-01-24 18 views
1

假設我有一類做出價值

struct X 
{ 
    static const X ZERO; 

    int value; 

    int square() const { return value * value; } 
    ... 
}; 

然後在一個TU我把它定義爲

const X X::ZERO { 0 }; 

然而,其他TU什麼都不知道關於價值,根據我的理解,不能根據這些知識進行優化,例如他們不能說在編譯時X::ZERO.square()是0。

是否有可能以某種方式擁有一個靜態字段,並且爲了優化的目的而仍然將所有TU都知道它的值? C++ 11很好。

+0

TU代表什麼? –

+0

翻譯單位。 – doublep

+1

在類本身中,你不能有一個類的類型爲'constexpr'的靜態數據成員,但是你可以有一個'static constexpr X get_zero();'函數。 – dyp

回答

-1

聽起來好像您正在尋找「整體程序優化」。在微軟的編譯器中,它的名稱爲「鏈接時間碼生成」。

+0

downvote的原因是什麼? WPO正是「爲了優化目的而從所有TU知道的一個TU定義」。 –