El análisis más desconcertante


El análisis más desconcertante es una forma contradictoria de resolución de ambigüedad sintáctica en el lenguaje de programación C++ . En ciertas situaciones, la gramática de C++ no puede distinguir entre la creación de un parámetro de objeto y la especificación del tipo de una función . En esas situaciones, se requiere que el compilador interprete la línea como una especificación de tipo de función.

El término "análisis más desconcertante" fue utilizado por primera vez por Scott Meyers en su libro de 2001 Eficaz STL . [1] Si bien es inusual en C , el fenómeno era bastante común en C++ hasta la introducción de la inicialización uniforme en C++11 . [2]

Aparece un ejemplo simple cuando se pretende que una conversión funcional convierta una expresión para inicializar una variable:

La línea 2 anterior es ambigua. Una posible interpretación es declarar una variable i con valor inicial producido al convertir my_dbl a un archivo int. Sin embargo, C permite paréntesis superfluos alrededor de declaraciones de parámetros de funciones ; en este caso, la declaración de ies en cambio una declaración de función equivalente a lo siguiente:

El estándar C++ requiere la segunda interpretación, que es inconsistente con la línea 9 anterior. Por ejemplo, Clang++ advierte que el análisis más desconcertante se ha aplicado en la línea 9 y errores en la siguiente línea: [3]

La interpretación requerida de estas declaraciones ambiguas rara vez es la deseada. [4] [5] Los tipos de función en C++ generalmente se ocultan detrás de typedefs y normalmente tienen una referencia explícita o un calificador de puntero . Para forzar la interpretación alternativa, la técnica típica es una sintaxis diferente de creación o conversión de objetos.