有人可以解释一下下面的语法吗?
void initList_v(Room *(& roomsList_p)[3])
{
roomsList_p[3] = new Room[3];
}
*(&)在函数签名中的意义是什么?这不是函数指针。有人可以帮助我了解这一点吗?
最佳答案
要解释变量的类型,请从内到外解开它:
roomsList_p
:roomsList_p
是&
:对[3]
:三个*
:指向Room
:Room
实例。 为什么当数组仍然衰减到指针时有人为什么要引用数组,并且可以这样声明函数:
void initList_v(Room *roomsList_p[3])
这是出于类型安全的考虑:正是因为数组会衰减为指针,所以忽略了数组参数声明的大小。但是,当将参数声明为引用时,调用者将被强制传递声明大小的数组。
旁注:由于方括号
[]
的绑定(bind)比指针*
和引用&
的绑定(bind)要牢固,因此必须使用括号来消除引用的歧义:Room *& roomsList_p[3]
将会是非法的,因为必须将其解释为对某事物的引用数组,但必须是arrays of references are not allowed。
关于c++ - 如何解释-输入*(&变量),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57504784/