(译)明示的なキーワードは何を意味するのでしょうか?

その答えは、元のオーバーフロースタックから取得されます:何が平均で明示的なキーワードをしますか?

関数のパラメータの要件を満たすために、可能な限り一回の暗黙の型変換を行われている変数が一致しない場合のパラメータは、関数に渡された場合、C ++コンパイラ。暗黙の型変換は、単一の引数のコンストラクタ呼び出し変換対象が参加するには、次の暗黙的な変換の例です。

1 
2
3
4
5
6
7
8
9
10
11
12
13
クラス 
{
パブリック フー( INTの FOO):m_foo(FOO) { }





INT からgetfoo () {戻り m_foo。}

プライベートint型 m_foo。}。


関数Fooパラメータとしてオブジェクト。

1 
2
3
4
大专栏   (译)明示的なキーワードは何を意味するのでしょうか?小娘= "行"> 無効 DoBar  (フー・FOO)
{ int型 I = foo.GetFoo()。}


今、私たちは、次の呼び出しDoBar機能を:

1 
2
3
4
int型 の主 ()
{
固体(42)。
}

明らかに、引数の型はないがFoo、しかしint、しかしでFoo構築されたオブジェクトを受け入れるようにint型の単一のパラメータを持つオブジェクトのコンストラクタなので、コンパイラが暗黙的にするために、このコンストラクタを呼び出しますint変換しますFoo

ディスプレイを指定するには、このコンストラクタは、explicitそれは我々は再びそれを使用する場合、コンパイラはこのような変換を禁止します、暗黙的な変換のこのタイプを望んでいないコンパイラ指示しDoBar(42)、それはエラーになりますが。

このキーワード理由を作るための理由は、いくつかの微妙なバグをもたらすために、私たちのプログラムを与える可能性があるため、この暗黙の型変換コンパイラです。たとえば、次のようにクラスのコンストラクタがあります。MyString(int size)この文字初期3の長さを示します。あなたはこの関数を呼び出しprint(const MyString&)、この文字が、あなたが書いたずさんなコードを印刷したいですprint(3)あなたはそれが文字「3」が、実際に戻り、空の文字列と3の長さをプリントアウトすることですたいです。

プログラミング推奨:一般的にプラス(マルチパラメータデフォルトパラメータを持つコンストラクタを含む)単一引数のコンストラクタのために必要explicit

おすすめ

転載: www.cnblogs.com/sanxiandoupi/p/11693064.html