Résolution d'ambiguïté
Pour effectuer des conversions explicites d'un type en un autre, vous devez utiliser des casts, en spécifiant le nom de type souhaité.Certains casts de type ont provoqué l'ambiguïté syntaxique.La conversion de type de style fonction suivant est ambigu :
char *aName( String( s ) );
Il est vague qu'il s'agisse d'une déclaration de fonction ou une déclaration d'objet avec un cast de style fonction comme initialiseur : Il peut déclarer une fonction qui retourne le type char * qui prend un argument de type String, ou il peut déclarer l'objet aName et l'initialise avec la valeur du cast d' s de taper String.
Si une déclaration peut être considérée comme une déclaration de fonction valide, elle est traitée en tant que tel.Uniquement si ce n'est probablement pas être une déclaration de fonction - c. autrement dit., si elle être incorrecte - est une instruction examinée pour voir s'il s'agit d'un cast de type de style fonction.Par conséquent, le compilateur considère l'instruction la déclaration d'une fonction et ignore les parenthèses autour de l'identificateur s.En revanche, les instructions :
char *aName( (String)s );
et
char *aName = String( s );
sont clairement les déclarations des objets, et une conversion définie par l'utilisateur de type String de taper char * est appelée pour effectuer l'initialisation d' aName.