浅析C++ 11 新特性

本文对C++11新特性进行了总结。介绍了使用C++11的理由,包括move语义可优化复制、提升性能;auto关键字能自动推断类型;Lambda表达式方便与STL算法结合;新智能指针杜绝内存泄漏;std::function让代码更灵活;还有override、final等小功能让代码意图更明确,以及静态断言可在编译时捕获错误。

 

https://www.kancloud.cn/wangshubo1989/new-characteristics/99721

浅析C++11新特性

 

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  

本文档使用 看云 构建

 

C++11新特性介绍了一段时间,至今为止也差不多了。是要总结的时候了: 
你可能会问我,为什么需要C++11呢,我这就给出理由:

理由1:《C++11新特性之 Move semantics(移动语义)》 
move语义(move semantics)。简单的说,它是优化复制的一种方式。有时候复制很显然是浪费的。如果你从一个临时的string对象复制内容,简单的复制指针到字符缓冲区将比创建一个新的缓冲区再复制要高效得多。他之所以能工作是因为源对象超出了范围。 
然而,在这以前C++并没有判断源对象是不是临时对象的机制。move语义通过除了复制操作外还允许你有一个move构造函数(move constructor)和一个move赋值运算(move assignment)符来提供这个机制。 
当你在Visual Studio 2010中使用标准库中的类如string或vector时,它们已经支持move语义了。这可以防止不必要的的复制从而改善性能。 
通过在你的类中实现move语义你可以获得额外的性能提升,比如当你把它们存储到STL容器中时。还有,move语义不仅可以应用到构造函数,还可以应用到方法(如vector的push_back方法)。

理由2:吐血整理C++11新特性》 
auto关键字可以自动推断类型,所以下面的代码:

 

现在可以很简单的写成:

 

尽管有些人会说,它隐藏了类型信息,在我看来它利大于弊,因为它减少了视觉混换并展示了代码的行为,还有它可以让你我少打很多字! 
理由5:Lambda表达式提供了一种方法来定义匿名方法对象(实际上是闭包),这是代码更加线性和有规律可循。这在和STL算法结合使用时很方便: 
bool is_fuel_level_safe() 

return all_of(_tanks.begin(), _tanks.end(), 
[this](Tank& t) { return t.fuel_level() > _min_fuel_level; }); 
}

**理由3:**新的智能指针(smart pointer)替换了有问题的auto_ptr,你可以不用担心内存的释放并移除相关释放内存的代码了。这让代码更清晰,并杜绝了内存泄露和查找内存泄露的时间。

理由4:《C++11新特性之std::function》把方法作为first class object是一个非常强大的特性,这让你的代码变得更灵活和通用了。C++的std::function提供了这方面的功能。方法提供一种包装和传递任何可调用的东西-函数指针, 仿函数(functor), lambda表达式等。

理由5:《c++11特性之override和final关键字》还有许多其它小的功能,如override、final关键字和nullptr让你的代码意图更明确。对我来说,减少视觉混乱和代码中能够更清楚地表达我的意图意味着更高兴、更高效。

理由6:《C++11新特性之 Static assertions 和constructor delegation》 
C++ 11提供了一种方法来检查先决条件并尽早的在可能的时机捕获错误-编译过程 
这是通过静态断言(static_assert)和类别属性模版实现的。这种方法的另一个好处是,它不需要占用任何的运行时开销,没有什么性能损失!

上一篇:C++11新特性之 Static assertions 和constructor delegation下一篇:C++11新特性之 std::future and std::async

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值