在试图理解 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 (*)()
来指定函数指针,因为我发现它更清晰。