null+****@clear*****
null+****@clear*****
2012年 3月 16日 (金) 10:02:21 JST
Kouhei Sutou 2012-03-16 10:02:21 +0900 (Fri, 16 Mar 2012)
New Revision: a9f322b78bd83ab895025c38d5208f467bc95671
Log:
doc coding-style: add about use intialize list
Modified files:
doc/source/developer/coding_style.rst
Modified: doc/source/developer/coding_style.rst (+35 -0)
===================================================================
--- doc/source/developer/coding_style.rst 2012-03-15 18:17:21 +0900 (3cd0d2a)
+++ doc/source/developer/coding_style.rst 2012-03-16 10:02:21 +0900 (583e0ac)
@@ -485,3 +485,38 @@ C++では真偽値に ``bool`` を使うためこのような状況は発生し
if (!memcmp(value1, value2, value_size)) {
printf("same value!\n");
}
+
+初期化
+------
+
+メンバー変数の初期化には初期化リストを用いる
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+無駄な処理を省くためにコンストラクターでのメンバー変数の初期化には初期化リストを用いる。初期化リストを用いないとコンストラクターの処理とコピーコンストラクター・代入処理が行われたりなど非効率である。(後述)
+
+よい例:
+
+ class Table
+ {
+ Table(const char *name);
+ std::string name_;
+ }
+
+ Table::Table(const char *name) :
+ name_(name)
+ {
+ }
+
+悪い例( ``std::string(name)`` のところでコンストラクターが動き、 ``name_ = ...`` のところで代入演算子が動いて2回初期化している):
+
+ class Table
+ {
+ Table(const char *name);
+ std::string name_;
+ }
+
+ Table::Table(const char *name)
+ {
+ name_ = std::string(name);
+ }
+