您的位置:首页 > 编程语言 > C语言/C++

C++11可变参数函数与for循环

2014-09-25 12:09 721 查看


//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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ c++11
相关文章推荐