5

标题来自 Marshall Cline 的著名站点C++ FAQ

作者声称以下两个代码示例之间存在差异。

假设 List 是某个类的名称。然后函数 f() 声明了一个名为 x 的本地 List 对象:

void f()
{
    List x;     // Local object named x (of class List)
    ...
}

但是函数 g() 声明了一个名为 x() 的函数,它返回一个 List:

void g()
{
    List x();   // Function named x (that returns a List)
    ...
}

但是使用第二种变体真的是错误的吗?

如果它真的是一个声明,编译器不会抱怨你不能在一个函数中声明一个函数吗?

4

1 回答 1

7

如果它真的是一个声明,编译器不会抱怨你不能在一个函数中声明一个函数。

当然不是。因为您可以使用函数声明函数。

这被称为最令人烦恼的解析,并且有据可查。其实代表编译器去处理会报错

List x();

作为变量声明。

但是使用第二种变体真的是错误的吗?

如果你想要一个变量,那么是的。如果你想声明一个函数......有点是的。您可以,但通常您会在函数范围之外执行此操作。

于 2012-09-06T09:31:58.620 回答