快速业务通道

三驾马车并驾齐驱 C++能否重焕青春

作者 凌众技术 来源 互联网 浏览 发布时间 2012-01-12

Java十几年来的迅猛发展,似乎在印证一个亘古不变的真理与时俱进。C语言几年来也在不断发力,作为变种,Object C在Apple应用领域如火如荼,而作为编程语言前三甲的C++,似乎低调了许多,尽管C++阵营甚至没有一个完整的标准,C++ 11的推出,必定会把这款“老”编程语言带到一个新的高度。正如C++之父Bjame Stroustrup说的那样,C++11就像一个新语言。的确,C++11的核心已经发生了巨大的变化,它现在支持Lambda表达式,对象类型自动推断,统一的初始化语法,委托构造函数,deleted和defaulted函数声明nullptr,以及最重要的右值引用。这篇文章会介绍C++11核心语言的一些突出特性。

  Lambda表达式

  Lambda表达式允许在调用处定义函数。 Lambda表达式的格式如下:

  

 

  [capture](parameters)->return-type {body}

  []里是函数调用的参数列表,表示一个Lambda表达式的开始。举个例子,for_each函数要求用户提供一个表明“行为”的函数对象。以vector为例,如果想使用for_each对其中的各元素全部赋值为 true,一般需要下列函数对象。

  

  class filler

  public : void operator ()( bool

  & i) const {i = true ;}

  } ;

  这样做的缺陷是麻烦,不直观。而如果使用lambda,一切变得简单许多。以boost.lambda为例,刚才的问题可以这么解决:

  

 

  for_each(v.begin(), v.end(), _1 = true );


 

  自动类型推断

  C++11借助auto关键字允许你声明对象时不指定类型。

  

  auto x=0; //x has type int because 0 is int

  auto c="a"; //char

  auto d=0.5; //double

  auto national_debt=14400000000000LL;//long long


 

  统一初始化语法

  老的C++至少有4个不同的初始化符号,包括:小括号初始化,“=”符号初始化,大括号初始化,构造函数初始化。有些存在重叠,容易引起混乱。为保持一致,C++11统一使用大括号符号。

  

  class C

  int a;

  int b;

  public:

  C(int i, int j);

  };

  C c {0,0}; //C++11 only. Equivalent to: C c(0,0);

  int* a = new int[3] { 1, 2, 0 }; /C++11 only

  // C++11 container initializer

  vector vs={ "first", "second", "third"};

  map singers =

  { {"Lady Gaga", "+1 (212) 555-7890"},

  {"Beyonce Knowles", "+1 (212) 555-0987"}};

  class X

  int a[4];

  public:

  X() : a{1,2,3,4} {} //C++11, member array initializer

  };

  class Y

  int a=7; //C++11 only

  public:

  Y();

  };

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号