练习16.51
调用本节中的每个foo,确定sizeof...(Args)和sizeof...(rest)分别返回什么。
解答:
按照foo函数的调用顺序,应该3,2,1,0 两个sizeof显示的值是一样的。
练习16.52
别写一个程序验证上一题的答案。
解答:
#include <string>
#include <iostream>
using namespace std;
template <typename T, typename ... Args>
void foo(const T &t, const Args& ... reset){
cout << sizeof...(Args) << endl;
cout << sizeof...(reset) << endl;
}
template <typename ...Args> void g(Args ... args){
cout << sizeof...(Args) << endl;
cout << sizeof...(args) << endl;
}
int main(){
int i = 0;
double d = 3.14;
string s = "hello";
foo(i, 42, d, "hi");
foo(s, 42, "hi");
foo(d, s);
foo("hi");
//g(s, 42);
}
书中说Args这个包表示零个或多个额外的类型参数。
rest包表示零个或多个函数参数。
但这样调用foo,
foo(i, 42,42,42);
我预测sizeof...(rset)会打印出3, sizeof...(Args)会打印出1
不过,程序得到的结果却是两个sizeof得到的值都是是3。
有点不大理解,要是这样的话,只留其中一个包就可以了,为什么还要留两个呢……