Entendendo a análise mais problemática - por que permitir uma sintaxe ambígua?
Ao tentar entender o problema "Mais problemático" em C / C ++, essa questão vem imediatamente à mente - por que uma sintaxe que faz com que esse problema comece?
Por exemplo,
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 (*)());
}
Então, porque não simplesmente desautorizarTimeKeeper time_keeper(Timer())
ser uma declaração de função que leva uma função sem nome ptr retornando tipo Timer? ÉTimeKeeper time_keeper(Timer (*)())
inferior como um declarator de função?
Não é devido a esta sintaxe que chegamos a ter essa ambiguidade ou estou faltando alguma coisa?
EDIT: Pessoalmente, eu nunca useiTimeKeeper time_keeper(Timer())
como uma declaração de função. Eu sempre usei oTimer (*)()
para especificar um ponteiro de função como eu acho mais claro.