天天看點

C++程式設計規範指47.以同樣的順序定義和初始化成員變量

摘要:

   與編譯器一緻:成員變量初始化的順序要與類定義中聲明的順序始終保持一緻,不用考慮構造函數初始化清單中編寫的順序。要確定構造函數代碼不會導緻混淆地指定不同的順序。

考慮以下代碼:

    這段代碼隐藏着一個錯誤,危害性極大,而且很難發現。因為類定義中email_是在first_和last_之前被聲明的,它将首先會被初始化,然後試圖使用其他未初始化的字段。更糟糕的是,如果構造函數的定義位于另一個檔案夾,成員變量聲明的順序對構造函數的正确性的遠距離影響就更難确定了。

    c++語言之是以才去這樣的設計,是因為要確定銷毀成員的順序是唯一的;否則,析構函數将以不同的順序銷毀對  象,具體順序取決于構造對象的構造函數。為此帶來的底層操作開銷應該是不可接受的。

解決方案是,總是按成員聲明的順序編寫吃呢個月初始化語句。這樣,任何非法依賴都會顯而易見。當然,盡量不讓一個成員的初始化依賴于其他成員更好。

    許多編譯器在我們違反了此條規則時會發出警告。

繼續閱讀