为什么在 C++ 中以如此混乱的方式定义“对数组的引用”?

2024-02-11

以下代码基于片段从这里 https://stackoverflow.com/q/6106158/57428。我想要一个模板化函数,它接受对实例化函数时推导的大小数组的引用:

template<int size>
void myFunction( SomeType(&param)[size] )
{
    //use param and size here
}

//called like this:
SomeType array[SomeConstant];
myFunction( array ); //SomeConstant magically gets into the function as "size"

现在我很困惑SomeType(&param)[size]。我希望以下内容能够发挥作用:

template<int size>
void myFunction( (SomeType[size])& param ) {}

但它不会编译。

为什么我需要这种奇怪的语法来“引用固定大小的数组”?


它基于 C 声明语法。当然,C 没有引用,但它旨在模仿 C 指针语法。这是一个指向数组的指针(在 C 或 C++ 中):

int (*parray)[size];

这个想法是声明模仿了用法。这意味着稍后当您使用时parray, 表达方式

(*parray)[0]

(或任何索引)是 int 类型。当然,引用类型的对称性会被打破,因为&在声明它们时使用,但不引用它们。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么在 C++ 中以如此混乱的方式定义“对数组的引用”? 的相关文章

随机推荐