一般情況下,在設計類時,初學者總是把私有成員變量和函數設成值類型,這樣做有三點不妥:
1、增加了編譯時間。若“私有成員變量”或“私有成員函數的參數”都是值定義的,那麼在編譯這個類時需要這些對象的完全定義。而如果這些類型的頭文件裏又包含了很多其他類(尤其對一個大的項目更是如此),那麼編譯時間將會相當長;
2、使名字查找和匹配產生多義性。在C++中,可視性(visibility)和可訪問性(accessibility)是不同的。這主要體現在名字匹配過程中。public、protected和private限制的是可訪問性,但不是可視性。事實上在C++中沒有什麼關鍵字是指定可視性的,這就是說在編譯時所有的代碼其實都可以“看見”類中的內容。下面這個例子會更清楚一些:
從上面這個例子可以看出,編譯器總是先進行名字匹配,此時是忽略可訪問性限制的。爲了解決這兩個問題,我們只能使用::Twice(21)和
c.Twice(string("Hello!"))。
3、安全性
此處涉及到很複雜的線程機制,不予詳細解釋。
更多資料請參照http://www.gamedev.net/reference/articles/article1794.asp
http://www.cppblog.com/SpringSnow/articles/80111.html兩篇博文。
————引自Sutter C++ Coding Standards