我浏览了《C++ 模板独特指南》一书,并尝试了解其中的推导指南std::array
作品。
关于标准的定义,声明如下
template <class T, class... U>
array(T, U...) -> array<T, 1 + sizeof...(U)>;
例如,如果在 main 中创建了一个数组
std::array a{42,45,77}
扣除是如何进行的?
谢谢
扣除是如何进行的?
这很简单。
Calling
std::array a{42,45,77}
match
array(T, U...)
with T = decltype(42)
and U... = decltype(45), decltype(77)
那是T = int
and U... = int, int
.
所以类型a{42,45,47}
become array<T, 1 + sizeof...(U)>
, so std::array<int, 1 + sizeof...(int, int)>
, so std::array<int, 1 + 2>
那是std::array<int, 3>
换句话说:提取参数的类型;第一个 (T
) 用于给出数组类型(第一个模板参数);其他的只是为了计算(sizeof...(U)
)。但是,对于模板第二个参数,重要的是还要计算第一个参数(类型为T
, 所以1
in 1 + sizeof...(U)
).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)