加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 当普通函数没有时,为什么模板函数接收带有1D参考的2D数组

发布时间:2020-12-16 05:02:57 所属栏目:百科 来源:网络整理
导读:void fun (char (a)[2]) // 1D reference{}templatetypename T,int SIZEvoid funT (T (a)[SIZE]) // 1D reference{}int main (){ char c[2][2]; // 2D array fun(c); // error funT(c); // ok !!!??} 我可以期待fun()给出错误,但是怎么来funT()工作正常! 这
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 !!!??
}

我可以期待fun()给出错误,但是怎么来funT()工作正常!
这种行为的标准中是否有任何参考,或者它是C语言中的错误?

解决方法

因为c的类型不是char [2],所以它与第一个不匹配 功能.在模板的情况下,T解析为char [2],这意味着 最终的参数类型是char(& a)[2] [2]. (你可以想到它 因为T成为char [2]的typedef的等价物,并且 根据它扩展参数类型.)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读