std::array 的推导指南

deduction guides for std::array

我仔细阅读了 C++ 模板独特指南一书,并尝试了解 std::array 的推导指南是如何工作的。 关于标准的定义,以下是声明

template <class T, class... U>
array(T, U...) -> array<T, 1 + sizeof...(U)>;

例如,如果在 main 中创建一个数组

std::array a{42,45,77} 

扣除是如何进行的?

谢谢

How the deduction takes place?

很简单。

正在调用

std::array a{42,45,77}

匹配

array(T, U...)

with T = decltype(42) and U... = decltype(45), decltype(77)T = int and U... = int, int.

所以a{42,45,47}的类型变成了array<T, 1 + sizeof...(U)>,所以std::array<int, 1 + sizeof...(int, int)>,所以std::array<int, 1 + 2>就是std::array<int, 3>

换句话说:提取参数的类型;第一个 (T) 用于给类型数组(第一个模板参数);其他的只是用来计算(sizeof...(U))。但是,对于模板的第二个参数,重要的是还要计算第一个参数(T 类型,因此 1 + sizeof...(U) 中的 1)。