原文:(原创)C++11改进我们的程序之move和完美转发

本次要讲的是右值引用相关的几个函数:std::move, std::forward和成员的emplace back,通过这些函数我们可以避免不必要的拷贝,提高程序性能。move是将对象的状态或者所有权从一个对象转移到另一个对象,只是转移,没有内存的搬迁或者内存拷贝。如图所示是深拷贝和move的区别。 这种移动语义是很有用的,比如我们一个对象中有一些指针资源或者动态数组,在对象的赋值或者拷贝时就不 ...

2013-10-18 16:06 3 8839 推荐指数:

查看详情

原创C++11改进我们的程序之简化我们的程序(五)

这次要讲的是:c++11中的bind和function std::function 它是函数、函数对象、函数指针、和成员函数的包装器,可以容纳任何类型的函数对象,函数指针,引用函数,成员函数的指针。以统一的方式处理函数、函数对象、函数指针、和成员函数。允许保存和延迟执行函数。 函数 ...

Thu Sep 05 05:44:00 CST 2013 2 9005
C++11 完美转发

【1】为什么引入完美转发? 在函数模板编程中,常有一种场景是把模板参数转发给另一个调用函数,这时候如果只提供值传递版本会显得效率太低。看以下代码: 代码很简单,就是用ARG参数去初始化一个TYPE类型的对象,然后返回该对象指针。 考虑一下,如果ARG类型是一个自定义类型 ...

Mon Jan 27 19:46:00 CST 2020 0 5403
原创C++11改进我们的程序之简化我们的程序(七)

这次要讲的内容是:c++11中的tuple(元组)。tuple看似简单,其实它是简约而不简单,可以说它是c++11中一个既简单又复杂的东东,关于它简单的一面是它很容易使用,复杂的一面是它内部隐藏了太多细节,要揭开它神秘的面纱时又比较困难。   tuple是一个固定大小的不同类型值的集合,是泛化 ...

Fri Sep 13 06:30:00 CST 2013 7 18676
原创C++11改进我们的程序之简化我们的程序(一)

C++11在很多方面可以简化我们的程序开发,我会在“简化我们的程序”这一系列的博文中一一讲到,敬请关注。这次要讲的是:C++11如何通过获取函数模板的返回值类型来简化我们的程序。在谈到简化之前,我们先看一个问题,这个问题也是我前段时间在开发C++版本的linq时遇到的。假设我们现在需要将集合按某种 ...

Wed Aug 28 05:46:00 CST 2013 15 4339
原创C++11改进我们的程序之简化我们的程序(四)

这次要讲的是:c++11统一初始化、统一begin()/end()和for-loop循环如何简化我们的程序 初始化列表 c++11之前有各种各样的初始化语法,有时候初始化的时候还挺麻烦,比较典型的如vector和map的初始化。   这种写法比较繁琐,而且不 ...

Wed Sep 04 06:16:00 CST 2013 4 1975
原创C++11改进我们的程序之简化我们的程序(六)

  这次要讲的内容是:c++11中的lamda表达式。   lamda表达式是我最喜欢的一个c++11特性之一,在我的代码中随处可见它的身影,其实在c#3.5中就引入了lamda,java中至今还没引入,要等明年的java8中才有lamda表达式,lamda来源于函数式编程的概念,也是现代 ...

Fri Sep 06 06:20:00 CST 2013 3 2895
原创C++11改进我们的程序之简化我们的程序(二)

  这次要讲的是:C++11如何通过组合函数来简化我们的程序。关于组合函数,大家可能对这个概念有点陌生。组合函数是将N个一元函数组成一种更复杂的函数,每个函数的返回值作为参数传给下一个函数,直到传到最后一个函数结束。这种组合函数的能力可以使我们以一种更直观的方式去完成复杂的链式执行行为。例如有三个 ...

Sat Aug 31 05:14:00 CST 2013 2 2399
原创C++11改进我们的程序之右值引用

本次主要讲c++11中的右值引用,后面还会讲到右值引用如何结合std::move优化我们的程序c++11增加了一个新的类型,称作右值引用(R-value reference),标记为T &&,说到右值引用类型之前先要了解什么是左值和右值。左值具名,对应指定内存域,可访问;右值 ...

Tue Oct 15 19:45:00 CST 2013 2 7410
 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM