//auto为自动变量类型设置符 例如 auto p = 1; 则p为int类型; auto自动适应类型
//对于template < typename T, typename ... Args >说 参数表是一个T类型和一个 ...Args类型打包
//对于 void func( T value, Args ... args ) 说 参数表是一个T类型的数据value和一个Args类型打包的数据打包args
//那么进行调用 func( n, m, 'a', str ); 时候, 调用了 void func( T value, Args ... args )
// n对应了value 而m, 'a', str 打包对应了args;
// 输出了value; 然后在进行一次打包 调用func( args ... ); 相当于func( m, 'a', str );
// 然后m对应了value 剩下两个数打包, 继续递归调用 直到打包args里包含0个元素的时候;
// 调用func( args ... ); 相当于无参函数 即调用了 func(); 则调用结束;
#include <iostream>
#include <string>
void func()
{
}
template < typename T, typename ... Args >
void func( T value, Args ... args )
{
std::cout << value << ", ";
func( args ... );
}
int main()
{
int p[] = { 1, 2, 3, 4, 6, 7, 8, 2 };
for( auto point : p ) //从p数组中取出每一个数字 给point 然后输出point;
{
std::cout << point << " "; //auto自动设置point类型
}
std::cout << std::endl;
for( auto &point : p ) //如果类型较大 应该使用引用传递, 提高效率
{
if( point == 4 )
{
point = 2; //修改其中的值 按值传递和引用传递都可以改值
}
std::cout << point << " ";
}
std::cout << std::endl;
int n = 14;
double m = 15.5;
std::string str = "asdf";
func( n, m, 'a', str );
return 0;
}