參考這個問題,stackoverflow.com/q/14188612,有編譯器摺疊兩個對象的方法實例的情況嗎?C++非靜態方法摺疊
比方說,我們有一個私人的「無狀態」的方法add
,不修改類成員以下類:
class Element
{
public:
Class(int a, int b) : a_(a), b_(b)
{
c_ = add(a, b);
}
private:
int add(int a, int b)
{
return a + b;
}
private:
int a_;
int b_;
int c_;
}
int main(void)
{
Element a(1, 2);
Element b(3, 4);
}
可我們有時期望add
實際上將被編譯爲static
樣方法?或者,更清楚的是,a.add
的地址等於b.add
(add
只存儲一次)。
這只是一個與理解編譯器優化有關的問題。
該方法可能被內聯,這使得它是靜態的還是不相關的。但是你不能通過檢查地址來告訴它 - 你得到該函數的地址,然後編譯器會給你一個非內聯版本的地址,但可能永遠不會調用它。看看生成的代碼,它是唯一真相的來源。 –
所有功能總是最多存儲一次。 – molbdnilo