mab*_*aba 4 c++ variable-declaration most-vexing-parse
标题来自Marshall Cline 着名的网站C++ FAQ.
作者声称以下两个代码示例之间存在差异.
假设List是某个类的名称.然后函数f()声明一个名为x的本地List对象:
void f()
{
List x; // Local object named x (of class List)
...
}
Run Code Online (Sandbox Code Playgroud)
但是函数g()声明了一个名为x()的函数,它返回一个List:
void g()
{
List x(); // Function named x (that returns a List)
...
}
Run Code Online (Sandbox Code Playgroud)
但使用第二种变体是否真的错了?
如果真的是一个声明,编译器会不会抱怨你不能在函数中声明一个函数?
如果真的是一个声明,编译器就不会抱怨你不能在函数中声明一个函数.
当然不是.因为你可以声明一个带函数的函数.
这被称为最令人烦恼的解析,并且有很好的记录.实际上,代表编译器处理它将是一个错误
List x();
Run Code Online (Sandbox Code Playgroud)
作为变量声明.
但使用第二种变体是否真的错了?
如果你想要一个变量,那么是的.如果你想声明一个函数......有点是.你可以,但通常你会在功能范围之外做.
| 归档时间: |
|
| 查看次数: |
1776 次 |
| 最近记录: |