标题来自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)
...
}
但使用第二种变体是否真的错了?
如果真的是声明,编译器会不会抱怨你不能在函数中声明一个函数吗?
答案 0 :(得分:6)
如果它确实是一个声明,编译器就不会抱怨你不能在函数中声明一个函数。
当然不是。因为你可以声明一个带函数的函数。
这被称为最令人烦恼的解析,并且有很好的文档记录。实际上,代表编译器处理
会出错List x();
作为变量声明。
但使用第二种变体是否真的错了?
如果你想要一个变量,那么是的。如果你想声明一个函数......有点是。你可以,但通常你是在功能范围之外做的。