热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

c–为什么编译器不能通过引用传递2D数组来计算数组的大小

只是想知道–我写了以下功能templateT*asFlatArray(Tarr[][N]){somecode}并称之为asFlatArray(myA

只是想知道 – 我写了以下功能

template
T* asFlatArray (T arr[][N])
{
// some code
}

并称之为

asFlatArray(myArray); // where myArray is int myArray[some_size][sime_size];

编译运行没有错误.但如果我改变’arr’来引用像

template
T* asFlatArray (T (&arr)[][N])
{
// some code
}

我会有错误:

parameter ‘arr’ includes reference to array of unknown bound ‘T [][N]’

我知道如何解决它

template
T* asFlatArray (T (&arr)[Rows][Columns])

但我不明白为什么会这样?

解决方法:

根本问题是第一个功能模板相当于

template
T* asFlatArray (T (*arr)[N]) {}

所以没有要计算的维度.它将匹配指向数组的指针,或任何可以衰减到指向数组的指针.因此也可以匹配2D阵列.

对于第二个例子,类型为T [] [N]的引用或指针不能是函数参数,这会导致编译器错误.当然,您可以为缺少的维度添加额外的模板参数:

template
T* asFlatArray(T (&arr)[N][M]) {}


推荐阅读
author-avatar
手机用户2602929101
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有