2011-08-02 7 views

答えて

8

は、ユーザー定義型が暗黙的に変換することができ、2つの方法があります変換コンストラクタで

  1. (例えば "のstd ::文字列::文字列(のconstのchar *のC_STRING)")。
  2. 変換演算子を使用します(例: "OldType :: operator NewType()const")。

単一のパラメータを使用し、キーワード「明示的」を使用しないコンストラクタは、暗黙的な変換(パラメータの型から構築されるオブジェクトの型への変換)を定義します。標準の文字列クラスは、この変換の利便性を提供するために意図的に "明示的"を使用しません。

7

std :: stringにはconst char *というコンストラクタがあるため、C++は自動的に一時的な文字列オブジェクトを作成します。

+7

重要な点として、_non-explicit_コンストラクタです。 – ildjarn

6

技術的にはchar const[6]ですが、暗黙の変換とstd::stringのコンストラクタのいずれかのおかげでこれを行うことができます。

1

?暗黙的な? std::string(char *)コンストラクタを使用してchar *からstd::stringへの変換。

2

あなたの質問に多少関連しています:もしあなたが* 明示的な * lyでコンパイラにこのようなタイプを変更させたくない場合は、互換性のあるコンストラクタが存在するとき、キーワード "明示的に "コンストラクタの前に。その後、コンパイラエラーが発生します。ただし、作成するタイプでのみこれを行うことができます。文字列のようなSTL型ではありません。

0

文字列リテラルはchar const[6]です。

機能に渡すためにその名前はconst char*に減衰します。

そして暗黙の変換が行われ、ため:

  • 機能は、それに結合することができるrvalueを意味し、REF対CONSTを受け入れる
  • const char*は暗黙std::stringrvalueに変換することができます。 。
関連する問題