通过引用传递数组参数

Edd*_*onk 15 c++ arrays pass-by-reference

我遇到了这个签名的功能.

void foo(char (&x)[5])
{
}
Run Code Online (Sandbox Code Playgroud)

这是通过引用传递固定大小的char数组的语法.

它需要围绕括号的事实让&x我感到不同寻常.

它可能是C++ 03标准的一部分.

这个表格叫什么,有人能指出对标准的引用吗?

c ++ decl还不是朋友:

$ c++decl 
Type `help' or `?' for help
c++decl> explain void foo(char (&x)[5])
syntax error
Run Code Online (Sandbox Code Playgroud)

new*_*cct 12

语法没有什么不寻常或新的.你在C中用指针一直看到它.[]优先级高于&,如果要声明对数组的引用,则需要将其放在括号中.同样的事情发生在*(它具有相同的优先级&):例如,要在C中声明一个指向5个字符数组的指针,你会这样做char (*x)[5];.类似地,指向获取并返回int的函数的指针将是int (*x)(int);(()具有相同的优先级[]).故事与引用相同,除了引用仅在C++上,并且对引用的类型有一些限制.


Ker*_* SB 11

没有什么可解释的,这就是声明的解析规则在C++中的工作原理:

char  & x[5] // declare x as array 5 of reference to char (not valid C++!)
char (&x)[5] // declare x as reference to array 5 of char
Run Code Online (Sandbox Code Playgroud)

警告:第一个版本不是有效的C++,因为您不能拥有引用数组.这仅仅是声明语法的解释.(抱歉花了这么长时间才能做到这一点,感谢有用的评论!)

如果您愿意,您可以将类型标识符包含在括号的仲裁级别中,因此您也可以说char &(x)[5](第一种情况)或char (((&x)))[5](第二种情况).