C++通过引用传递数组

Chi*_*hin 4 c++ arrays reference

可能重复:
有关引用数组参数的有用信息是什么?

void myFunction( int (&arg)[4] );
Run Code Online (Sandbox Code Playgroud)

void myfunction(int arg[4]);
Run Code Online (Sandbox Code Playgroud)

不同?他们有什么不同?先做什么以及如何称呼它?

Pra*_*ian 7

它们是不同的.第一个引用4个int的数组作为其参数.第二个采用指向未知数量的int的数组的第一个元素作为其参数.

int array1[4] = {0};
int array2[20] = {0};

void myFunction1( int (&arg)[4] );
void myFunction2( int arg[4] );

myFunction1( array1 ); // ok
myFunction1( array2 ); // error, size of argument array is not 4

myFunction2( array1 ); // ok
myFunction2( array2 ); // ok
Run Code Online (Sandbox Code Playgroud)

  • @Chin:在函数签名中,类型为T*的N个元素的*数组被转换为*指向T*的指针.如果类型是*引用...的数组,则不会发生这种情况.原因是在C(其中C++从中获得此行为)中,您无法按值传递数组,因为它可能是一项昂贵的操作.因此,当您使用语法通过值传递数组时,函数将采用指针,并且在调用站点处,数组将衰减为指向第一个元素的指针. (3认同)
  • 始终丢弃函数参数中数组的第一个维度.所以拥有4没有任何区别. (2认同)