Понимание «самого неприятного анализа» - зачем разрешать неоднозначный синтаксис?
Пытаясь понять «самый неприятный синтаксический анализ» проблема в C / C ++, этот вопрос сразу приходит на ум - почему есть синтаксис, который вызывает эту проблему для начала?
Например,
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 (*)());
}
Так почему бы просто не запретитьTimeKeeper time_keeper(Timer())
быть объявлением функции, которая принимает безымянную функцию ptr, возвращающую тип Timer? ЯвляетсяTimeKeeper time_keeper(Timer (*)())
уступает в качестве объявления функции?
Разве не из-за этого синтаксиса мы даже получаем эту двусмысленность или я что-то упускаю?
РЕДАКТИРОВАТЬ: Лично я никогда не использовалTimeKeeper time_keeper(Timer())
как объявление функции. Я всегда использовалTimer (*)()
указать указатель на функцию, поскольку я нахожу это более понятным.