我遇到了以下被剥离的代码,它将数组传递给构造函数:
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) {}
现在,模板化的构造函数根本没有被调用,这个构造函数就是这样!
有人可以解释这个构造函数的奇怪模板形式及其说法,然后为什么当我添加一个带指针的构造函数时,模板化版本根本不被调用?