Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 当普通函数不使用时,为什么模板函数接收带有1D引用的2D数组';T void fun(char&a)[2])//1D引用 {} 模板 void funT(T&a)[大小]//1D引用 {} int main() { 字符c[2][2];//二维数组 fun(c);//错误 funT(c);//好的!!!?? }_C++_Arrays_Templates_Pass By Reference - Fatal编程技术网

C++ 当普通函数不使用时,为什么模板函数接收带有1D引用的2D数组';T void fun(char&a)[2])//1D引用 {} 模板 void funT(T&a)[大小]//1D引用 {} int main() { 字符c[2][2];//二维数组 fun(c);//错误 funT(c);//好的!!!?? }

C++ 当普通函数不使用时,为什么模板函数接收带有1D引用的2D数组';T void fun(char&a)[2])//1D引用 {} 模板 void funT(T&a)[大小]//1D引用 {} int main() { 字符c[2][2];//二维数组 fun(c);//错误 funT(c);//好的!!!?? },c++,arrays,templates,pass-by-reference,C++,Arrays,Templates,Pass By Reference,我可以预料fun()会出现错误,但是funT()怎么会正常工作呢! 在这种行为中是否有任何引用,或是“强>是在C++语言中的错误< /强>? t>代码>将解析为 char *代码> char(2)< /Cord>,因此,模板功能不应该有任何问题。 编辑:感谢詹姆斯指出这一点。因为c的类型不是char[2],它与第一个不匹配 功能。在模板的情况下,T解析为char[2],这意味着 最后一个参数类型是char(&a)[2][2]。(你可以想出来 随着T成为typedef到char[2]的等价物,以

我可以预料
fun()
会出现错误,但是
funT()
怎么会正常工作呢!
在这种行为中是否有任何引用,或是“强>是在C++语言中的错误< /强>?

<代码> t>代码>将解析为<代码> char *<代码>代码> char(2)< /Cord>,因此,模板功能不应该有任何问题。


编辑:感谢詹姆斯指出这一点。

因为
c
的类型不是
char[2]
,它与第一个不匹配 功能。在模板的情况下,
T
解析为
char[2]
,这意味着 最后一个参数类型是
char(&a)[2][2]
。(你可以想出来 随着
T
成为
typedef
char[2]
的等价物,以及
在此基础上展开参数类型。)

-1,因为答案不正确。他的代码中没有涉及任何
char*
。在函数模板中,请尝试打印
cout。需要注意的是
char c[2][2]
不是二维数组,而是一维数组的一维数组。这条推理路线使理解问题变得简单
c
是一个1D数组,只是不是我第一次猜测的
char
。我甚至对@RedX给出的与指针相关的答案感到惊讶。
void fun (char (&a)[2])  // 1D reference
{}

template<typename T, int SIZE>
void funT (T (&a)[SIZE])  // 1D reference
{}

int main ()
{
  char c[2][2];  // 2D array
  fun(c);  // error
  funT(c); // ok !!!??
}