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
)。
我仔细阅读了 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
)。