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())
では、タイプ Timer を返す名前のない関数 ptr を受け取る関数宣言を単純に禁止しないのはなぜでしょうか? TimeKeeper time_keeper(Timer (*)())
関数宣言子として劣っていますか?
このあいまいさが得られるのは、この構文が原因ではないのでしょうか、それとも何か不足していますか?
編集: 個人的にはTimeKeeper time_keeper(Timer())
、関数宣言として使用したことはありません。Timer (*)()
より明確にわかるように、関数ポインターを指定するために常に を使用してきました。