explicit
読み:イクスプリシット
外語:explicit

 C++C#予約語の一つ。
目次

概要
 英語でexplicitは明快を意味し、関数を修飾する。
 explicit変換演算子は、意図しない変換の呼び出しを回避するために使われる。

C++

コンストラクター
 C++では、引数の型が異なる場合に、対応するコンストラクターがあれば暗黙のうちに型変換のために呼び出されることがある。一方、explicitで修飾されたコンストラクターは、明示的にコードに書かない限り呼び出されない。
 例えば、
 class clsTest {
 public:
 explicit clsTest(int arg);
 };
 とした時、
 int main()
 {
 clsTest test(123);
 test = 456; // ←エラー
 test = clsTest(456); // ←OK
 return EXIT_SUCCESS;
 }
 のようになる。
 暗黙の型変換は行なわれず、明示的にコンストラクターを呼び出す必要がある。

変換関数
 C++11では、変換関数にも使うことができる。
 例えば、
 class B {};
 class D {
 public:
 explicit operator B() const;
 };
 とした時、
 int main()
 {
 D d;
 B ba = d; // ←エラー
 B bb = (B)d; // ←OK
 return EXIT_SUCCESS;
 }
 のようになる。
 暗黙の変換は行なわれず、明示的にキャストを用いる必要がある。

再検索