这行是否声明了一个函数?C++

GRB*_*GRB 4 c++ function-declaration

我读litb提问关于SFINAE 在这里,我想知道到底是什么他的代码声明.下面是一个更简单的(没有模板)示例:

int (&a())[2];
Run Code Online (Sandbox Code Playgroud)

究竟是什么声明?&的作用是什么?为了增加我的困惑,如果我宣布以下内容

int b()[2];
Run Code Online (Sandbox Code Playgroud)

我收到一个关于声明一个返回数组的函数的错误,而第一行没有这样的错误(因此,人们会认为第一个声明不是函数).但是,如果我尝试分配一个

a = a;
Run Code Online (Sandbox Code Playgroud)

我得到一个错误,说我正在尝试分配函数...所以现在它是一个函数.究竟是什么东西?

Tyl*_*nry 17

这些令人敬畏的程序叫做cdecl和c ++ decl.它们非常有助于找出复杂的声明,特别是对于C和C++用于函数指针的拜占庭形式.

tyler@kusari ~ $ c++decl
Type `help' or `?' for help
c++decl> explain int (&a())[2]
declare a as function returning reference to array 2 of int
c++decl> explain int b()[2]
declare b as function returning array 2 of int
Run Code Online (Sandbox Code Playgroud)

a返回引用,b不返回.

  • 这实际上非常有用. (2认同)

And*_*ong 8

为了将来参考,当您有一个特别难以解密的C/C++声明时,您可能会发现此链接很有用:

如何阅读C声明

为了完整起见,我将重复其他人所说的直接回答你的问题.

int (&a())[2];
Run Code Online (Sandbox Code Playgroud)

...宣告一个以零参数的函数返回的大小2的整数数组的引用(读链路上的基本规则,上面有如何,我想出了一个清晰的认识.)

int b()[2];
Run Code Online (Sandbox Code Playgroud)

...声明b是一个零参数函数,它返回一个大小为2的整数数组.

希望这可以帮助.