クラスのインスタンス化は、以下のようにして行います。
class int_a {
public:
int_a(unsigned int size);
int_a exp(10); // インスタンス化
int_a exp = 10; // これでもインスタンス化
}
int_a exp(10); // インスタンス化
int_a exp = 10; // これでもインスタンス化
の2つの書き方は、インスタンス化の方法として、どちらも有効です。
個人的には、「int_a exp(10);」のほうが分かりやすいと思います。
ですので、「int_a exp = 10;」のインスタンス生成の書き方ができないようにするために、explicitキーワードを用いて、明示的なコンストラクタを宣言する方法があります。
class int_a {
public:
explicit int_a(unsigned int size);
int_a exp(10); // インスタンス化
int_a exp = 10; // この書き方は無効になる
}
明示的なコンストラクタを、explicitを用いて上記のように書けば、オブジェクトに値を代入するなどして、意図しない動作を抑制できます。
コンストラクタを明示する場合は、explicitキーワードで宣言すると良さそうです。
■この記事のトラックバックURL:
http://www.mapee.jp/mpe334/mt-tb.cgi/241