我經常遇到C++中的大型非模板類,其中簡單方法直接在頭文件的類體中定義,而不是在實現文件中單獨定義。例如:爲什麼C++方法有時在類中定義?
class Foo {
int getBar() const { return bar; }
...
};
爲什麼這樣做?這似乎有缺點。實現並不像應該那樣隱藏,代碼的可讀性較差,如果類的頭文件包含在許多不同的地方,編譯器的負擔也會增加。
我的猜測是人們打算將這些函數內聯到其他模塊中,這可以顯着提高性能。然而,我聽說新的編譯器可以在跨模塊的鏈接時進行內聯(和其他過程間優化)。對這種鏈接時間優化的支持有多廣泛,它是否實際上使這種定義成爲不必要的?這些定義還有其他什麼好的理由嗎?
是的,但「默認內聯」並不意味着編譯器會內聯它們,只是您不需要手動添加「內聯」關鍵字的*提示*。 – 2008-11-06 09:06:41