如何通过引用传递静态分配的数组?
void foo(int (&myArray)[100]) { } int main() { int a[100]; foo(a); }
(&myArray)[100]是否有任何意义或它只是一个通过引用传递任何数组的语法? 我不明白这里单独的圆括号后面跟着大括号。谢谢。< / p >
(&myArray)[100]
它是数组引用的语法——你需要使用(&array)向编译器澄清你想要一个数组的引用,而不是(无效的)引用数组int & array[100];。
(&array)
int & array[100];
编辑:一些澄清。
void foo(int * x); void foo(int x[100]); void foo(int x[]);
这三种是声明同一个函数的不同方式。它们都被视为接受int *参数,你可以将任何大小的数组传递给它们。
int *
void foo(int (&x)[100]);
它只接受100个整数的数组。你可以安全地在x上使用sizeof
x
sizeof
void foo(int & x[100]); // error
这将被解析为“引用数组”——这是不合法的。
这只是必需的语法:
void Func(int (&myArray)[100])
^通过引用参数名myArray传递100 int数组;
myArray
int
void Func(int* myArray)
传递一个数组。数组衰减为指针。这样就会丢失大小信息。
void Func(int (*myFunc)(double))
传递一个函数指针。该函数返回int并接受double。参数名称为myFunc。
double
myFunc
它是一种语法。在函数参数中,int (&myArray)[100]括号括起&myArray是必要的。如果你不使用它们,你将传递一个array of references,这是因为subscript operator []比& operator有更高的优先级。
int (&myArray)[100]
&myArray
array of references
subscript operator []
& operator
例如int &myArray[100] // array of references
int &myArray[100] // array of references
因此,通过使用type construction (),你告诉编译器你想引用一个包含100个整数的数组。
type construction ()
如int (&myArray)[100] // reference of an array of 100 ints
int (&myArray)[100] // reference of an array of 100 ints
数组默认由指针传递。为了更好地理解,您可以尝试在函数调用中修改数组。
下面的代码创建了一个泛型函数,通过引用获取任意大小和类型的数组:
template<typename T, std::size_t S> void my_func(T (&arr)[S]) { // do stuff }
玩的代码