あいまいさの解決
1 個の型から別の参照型への変換を実行するには目的の種類の名前を指定したキャストを使用する必要があります。ある型キャストでは構文のあいまいさが発生します。次の関数スタイルの型キャストがあいまいです :
char *aName( String( s ) );
これは初期化子としてキャスト関数の関数宣言またはオブジェクトの宣言であるかどうかを明確ではありません : 同じ型の String1 個の引数を受け取るオブジェクト aName を宣言しString を入力するに s のキャスト値で初期化できます char * 型を返す関数を宣言できますか。
宣言が有効な関数宣言と見なすことができる場合はその処理されます。つまりの場合は関数スタイルの型キャストであるかどうかをチェックするステートメントが関数宣言にできない場合にのみ構文上正しくありません。したがってコンパイラはステートメントは関数の宣言であると見なされるため識別子 s を囲むかっこを無視します。一方ステートメント :
char *aName( (String)s );
および
char *aName = String( s );
オブジェクトの宣言はaName の初期化を実行するために char * を型 String のユーザー定義の変換が開始されます。