c++ - 为什么 "reference to array"在 C++ 中以如此困惑的方式定义?

标签 c++ syntax declaration

以下代码基于片段 from here .我想要一个模板化函数,它接受对实例化函数时推导出的大小数组的引用:

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(¶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/

相关文章:

具有可变参数包的函数的 C++ 部分模板参数推导在 Clang 和 MSVC 中产生不明确的调用

perl - 这些 "open"格式有什么区别

Delphi:右括号可选?

c - C 编译器如何处理不同类型的声明?

c - 结构成员声明为 ": 1 "

c++ - Boost asio - udp 服务器

c++ - 关于类互动的问题

syntax - VHDL 中的实体语法

c++ - .obj 中已经定义的变量;这里发生了什么?

c++ - boost::container::string 的内存是否连续?