キーワードは、クラスのコンストラクタで使用することができます。その役割は暗黙の型変換ではありません。
1 class gxgExplicit //没有关键字explicit的类
2
3 {
4
5 public:
6
7 int _size;
8
9 gxgExplicit(int size)
10
11 {
12
13 _size = size;
14
15 }
16
17 };
ここで呼び出しがあります
gxgExplicit gE1(24); //这样是没有问题的
gxgExplicit gE2 = 1; //这样也是没有问题的
gxgExplicit gE3; //这样是不行的,没有默认构造函数
gE1 = 2; //这样也是没有问题的
gE2 = 3; //这样也是没有问题的
gE2 = gE1; //这样也是没有问题的
gxgExplicitがスタックに改訂された場合は、私たちの_sizeは、スタックのサイズを表す。しかし、2番目の文が目立た通話になり、人々は混乱してしまいます。それは(コンパイラがコンパイルする)正当であるが、これは、コードリーダが理解することを可能にし、許容される形態ではありません。これは、コンパイラのデフォルトは暗黙の型変換関数ケースを持っているので、あなたはGE2 = 1は、最初の文と同じ結果にコンパイルします入力しています。だから、明示的には便利になりました。次のようにコードを変更します。
1 class gxgExplicit
2
3 {
4
5 public:
6
7 int _size;
8
9 explicit gxgExplicit(int size)
10
11 {
12
13 _size = size;
14
15 }
16
17 };
上記の呼び出しを続けます。
gxgExplicit gE1(24); //这样是没有问题的
gxgExplicit gE2 = 1; //这样是不行的,关键字取消了隐式转换
gxgExplicit gE3; //这样是不行的,没有默认构造函数
gE1 = 2; //这样是不行的,关键字取消了隐式转换
gE2 = 3; //这样是不行的,关键字取消了隐式转换
gE2 = gE1; //这样是不行的,关键字取消了隐式转换,除非类实现操作符“=”的重载。
これは、コンパイラ(VS2005)のショーである:「gxgExplicit」から 'int型から変換することはできません。
ここからは、このキーワードは、コンパイラの暗黙の変換機能がオフに遮蔽することで、アクションが表示されます。
つ以上のコンストラクタパラメータの暗黙的な変換が自動的に解除されたときに、以下に説明するMSDNの事実上の点があることに留意されたいです。例えば
1 class gxgExplicit
2
3 {
4
5 private:
6
7 int _size;
8
9 int _age;
10
11 public:
12
13 explicit gxgExplicit(int age, int size)
14
15 {
16
17 _age = age;
18
19 _size = size;
20
21 }
22
23 };
これは、キーワードの掲載結果は同じではありません。これは、キーワードのと同じです。
しかし、もう一つの例外:入力するためのパラメータの一つだけ、デフォルト値を持つパラメータ残部。
1 class gxgExplicit
2
3 {
4
5 private:
6
7 int _size;
8
9 int _age;
10
11 public:
12
13 explicit gxgExplicit(int age, int size = 0)
14
15 {
16
17 _age = age;
18
19 _size = size;
20
21 }
22
23 };
ます。https://my.oschina.net/u/204616/blog/545486で再現