C++explicitキーワードをコンストラクション関数に適用
C++explicitキーワードは、主に構造関数を修飾するために使用され、この構造関数が表示されていることを示します.そこで、正しい使い方を見てみましょう.
C++プログラミング言語はC言語のアップグレードバージョンと見なすことができ、その中には多くの応用方式がC言語と似ているが、同時にC言語よりも機能が強く、応用方式がより柔軟である.ここではまずC++explicitキーワードの応用方法からこの言語の応用方法を具体的に分析することができる.
C++explicitキーワードはクラスの構造関数を修飾するために使用され、その構造関数が明示的であることを示し、「明示的」である以上必然的に「暗黙的」である以上、何が表示され、何が暗黙的であるのか.
C++クラスのコンストラクション関数にパラメータがある場合、コンパイル時にデフォルトの変換操作があります.コンストラクション関数に対応するデータ型のデータをクラスオブジェクトに変換します.次のようにします.
上のコードでは、コンパイラが自動的にMyClassクラスのオブジェクトに変換します.実際には、次の操作と同じです.
上記のすべての操作は、いわゆる「暗黙的変換」です.
このような自動変換機能を避けるには、どうすればいいのでしょうか.へへへこれがキーワードexplicitの役割で、クラスのコンストラクション関数を「表示」と宣言します.つまり、コンストラクション関数を宣言します.
前にC++explicitキーを追加すれば、この自動変換操作を防ぐことができます.上のMyClassクラスのコンストラクション関数を表示に変更すると、下のコードはできません.
コンパイルは次のように行われました.
C++プログラミング言語はC言語のアップグレードバージョンと見なすことができ、その中には多くの応用方式がC言語と似ているが、同時にC言語よりも機能が強く、応用方式がより柔軟である.ここではまずC++explicitキーワードの応用方法からこの言語の応用方法を具体的に分析することができる.
C++explicitキーワードはクラスの構造関数を修飾するために使用され、その構造関数が明示的であることを示し、「明示的」である以上必然的に「暗黙的」である以上、何が表示され、何が暗黙的であるのか.
C++クラスのコンストラクション関数にパラメータがある場合、コンパイル時にデフォルトの変換操作があります.コンストラクション関数に対応するデータ型のデータをクラスオブジェクトに変換します.次のようにします.
- class MyClass
- {
- public:
- MyClass( int num );
- }
- ....
- MyClass obj = 10; //ok,convert int to MyClass
上のコードでは、コンパイラが自動的にMyClassクラスのオブジェクトに変換します.実際には、次の操作と同じです.
- MyClass temp(10);
- MyClass obj = temp;
上記のすべての操作は、いわゆる「暗黙的変換」です.
このような自動変換機能を避けるには、どうすればいいのでしょうか.へへへこれがキーワードexplicitの役割で、クラスのコンストラクション関数を「表示」と宣言します.つまり、コンストラクション関数を宣言します.
前にC++explicitキーを追加すれば、この自動変換操作を防ぐことができます.上のMyClassクラスのコンストラクション関数を表示に変更すると、下のコードはできません.
コンパイルは次のように行われました.
- class MyClass
- {
- public:
- explicit MyClass( int num );
- }
- ....
- MyClass obj = 10; //err,can't non-explict convert