Partilhar via


Resolução de ambiguidade

Para executar conversões explícitas de um tipo em outro, você deve usar as conversões, especificando o nome do tipo desejado. Algumas conversões de tipos resultam na ambiguidade sintática. A seguinte conversão de tipos estilo função é ambígua:

char *aName( String( s ) );

Não está claro se esta é uma declaração de função ou uma declaração de objeto com conversão estilo função do inicializador: poderia declarar um tipo de retorno char * que usa um argumento de tipo String ou poderia declarar o objeto aName e inicializá-lo com o valor de s convertido no tipo String.

Se uma declaração puder ser considerada uma declaração de função válida, ela será tratada como tal. Se, possivelmente, ela não for uma declaração de função – ou seja, se estiver sintaticamente incorreta — será uma instrução examinada para ver se é uma conversão de tipo estilo função. Portanto, o compilador considera a instrução como uma declaração de uma função e ignora os parênteses em torno do identificador s. Por outro lado, as instruções:

char *aName( (String)s );

e

char *aName = String( s );

são claramente declarações de objetos, e uma conversão definida pelo usuário do tipo String no tipo char * é chamada para executar a inicialização de aName.

Consulte também

Referência

Declaradores abstratos C++