explicitキーワード

2481 ワード

C++はキーワードexplicitを提供し、許可すべきでない変換構造関数による暗黙的な変換の発生を阻止することができる.explicitとして宣言されたコンストラクション関数は、暗黙的な変換では使用できません.
目次
1言葉の意味
2 C++のexplicit
1語意編集
explicit
adj.
詳しく述べる、はっきりしている、はっきりしている、隠さない、露骨な、外在的な、はっきりしている、率直な、直接支払う
英英解釈:形容詞explicit:
1. precisely and clearly expressed or readily observable; leaving nothing to implication
類義語:expressed
2. in accordance with fact or the primary meaning of a term
類義語:denotative
慣用語be explicit about何かに対する態度が鮮明
例文
He avoids the explicit answer to us.
彼は私たちに明確な答えを避けた.
They gave explicit reasons for leaving.
彼らは離れた原因を明確に話した.
She was quite explicit about why she left.
彼女は自分が去った原因を率直に言った.
2 C++のexplicit編集
C++では、1つのパラメータのコンストラクション関数(または、最初のパラメータを除く残りのパラメータにデフォルト値のマルチパラメトリックコンストラクション関数)が、2つの役割を果たします.1はコンストラクタ、2はデフォルトで隠されたタイプ変換オペレータです.
したがって、AAA=XXXのようなコードを書く場合があり、ちょうどXXXのタイプはAAA単一パラメータコンストラクタのパラメータタイプであり、コンパイラは自動的にこのコンストラクタを呼び出し、AAAのオブジェクトを作成します.
これはかっこいいようで便利です.しかし、場合によっては(以下の権威の例を参照)、私たち(プログラマー)の本意に反しています.この場合、このコンストラクタの前にexplicit修飾を付け、このコンストラクタが明確に呼び出され、使用され、タイプ変換オペレータとして暗黙的に使用できないことを指定します.ほほほ、堂々としたほうがいいようです.
explicit構造関数の役割
解析:
explicitコンストラクション関数は、暗黙的な変換を防止するために使用されます.次のコードを見てください.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 classTest1 { public : Test1(intn) { num=n; } // private : intnum; }; classTest2 { public : explicitTest2(intn) { num=n; } //explicit( ) private : intnum; }; intmain() { Test1t1=12; // , Test2t2=12; // , Test2t3(12); // return0; }
Test 1のコンストラクション関数にはint型のパラメータがあり,コード17行はTest 1を呼び出すこのコンストラクション関数に暗黙的に変換される.Test 2のコンストラクション関数はexplicit(明示的)と宣言されており、これは暗黙的な変換でこのコンストラクション関数を呼び出すことができないことを示しているため、コード18行にコンパイルエラーが発生する.
通常のコンストラクション関数は暗黙的に呼び出すことができる.一方、explicitコンストラクション関数は明示的に呼び出されるしかありません.