以下代码基于片段 from here .我想要一个模板化函数,它接受对实例化函数时推导出的大小数组的引用:
template<int size>
void myFunction( SomeType(¶m)[size] )
{
//use param and size here
}
//called like this:
SomeType array[SomeConstant];
myFunction( array ); //SomeConstant magically gets into the function as "size"
现在我对 SomeType(¶m)[size]
感到困惑。我希望以下内容起作用:
template<int size>
void myFunction( (SomeType[size])& param ) {}
但它不会编译。
为什么“引用固定大小的数组”需要这种奇怪的语法?
最佳答案
它基于 C 声明语法。当然,C 没有引用,但它是为了模仿指针的 C 语法。这是一个指向数组的指针(在 C 或 C++ 中):
int (*parray)[size];
这个想法是声明模仿用法。它的意思是建议稍后当您使用 parray
时,表达式
(*parray)[0]
(或任何索引)是 int 类型。当然,引用类型不对称,因为在声明它们时使用了 &
而不是引用它们。
关于c++ - 为什么 "reference to array"在 C++ 中以如此困惑的方式定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6456253/