Entender 'el análisis más desconcertante': ¿por qué permitir una sintaxis ambigua?
Al tratar de comprender el problema del "análisis más desconcertante" en C / C ++, esta pregunta viene inmediatamente a la mente: ¿por qué tener una sintaxis que haga que este problema comience?
Por ejemplo,
class Timer
{
public:
Timer();
};
class TimeKeeper
{
public:
TimeKeeper(const Timer& t);
int get_time()
{
return 1;
}
};
int main()
{
TimeKeeper time_keeper(Timer());
// the above is eq to this: TimeKeeper time_keeper(Timer (*)());
}
Entonces, ¿por qué no simplemente rechazarTimeKeeper time_keeper(Timer())
¿Es una declaración de función que toma una función sin nombre ptr tipo de retorno Timer? EsTimeKeeper time_keeper(Timer (*)())
¿De inferior como declarador de función?
¿No es debido a esta sintaxis que incluso obtenemos esta ambigüedad o me estoy perdiendo algo?
EDITAR: Personalmente, nunca he usadoTimeKeeper time_keeper(Timer())
como una declaracion de funcion. Siempre he usado elTimer (*)()
para especificar un puntero de función cuando lo encuentre más claro.