将数组传递给模板化构造函数:奇怪的语法

时间:2017-03-17 19:44:50

标签: c++ arrays templates

我遇到了以下被剥离的代码,它将数组传递给构造函数:

struct FF
{
    template <int N> FF(int(&a)[N]);
private:
    void* arena_;
};


template <int N>
inline FF::FF(int(&a)[N])
    : arena_(a)
{
    /*empty*/
}

可以这样调用:

int intArr[5];
FF ff(intArr);

现在,在int(&a)[N]中,显然模板参数N将取自数组的大小,在本例中为5,但我不理解int(&a)部分。每当我之前传递一个数组时,我总是将它传递给一个期望指针的函数(因为传递一个数组与传递该数组的第一个元素的地址相同,所以我们有效地将&amp;数组赋值给*)。但是在这里我们似乎将数组的地址传递给构造函数,期望看起来像引用?

然后我添加了第二个构造函数:

FF(int* pArr) {}

现在,模板化的构造函数根本没有被调用,这个构造函数就是这样!

有人可以解释这个构造函数的奇怪模板形式及其说法,然后为什么当我添加一个带指针的构造函数时,模板化版本根本不被调用?

0 个答案:

没有答案