关于包展开那三个点的用法,今天有了一点领悟,总的来说,三个点在哪个后面,展开的对象就是哪个。就目前所见到的情况而言,参数包都是用在initializer_list里面的,不是随便哪里都能展开的。像下面这个就不能展开
template<class T>
T func(T t) {
return t;
}
template<class T,class... U>
void g(T t, U... u) {
func(u)... ;//你以为可以直接展开成func(a),func(b),func(c)...,其实不行的
}
下面这样就可以展开
template<class T,class... U>
void g(T t, U... u) {
int a[]={(func(u),0)...};//逗号表达式的值为最右(即最后一个表达式的值)
}
就因为它是在正确的环境里面进行展开操作的。