C++11 新特性

来源:互联网 发布:徐州软件测试招聘 编辑:程序博客网 时间:2024/05/17 08:39

C++11 维基百科
https://en.wikipedia.org/wiki/C%2B%2B11

C++11 常用语法
http://blog.csdn.net/suxinpingtao51/article/details/46726257

函数式编程

http://www.ruanyifeng.com/blog/2012/04/functional_programming.html

lambda表达式

http://www.cnblogs.com/zhuyp1015/archive/2012/04/08/2438176.html

例子

struct Student {    unsigned ID;    string name;    Student(unsigned i, string n) :        ID(i), name(n) {    }};int main(){    Student a[] = { Student(2, "John"), Student(0, "Tom"), Student(1, "Lily") };    sort(a, a + 3, [](const Student& val1, const Student& val2) {return val1.ID < val2.ID; });    for_each(a, a + 3,        [](const Student& val) {cout << val.ID << ' ' << val.name << endl; });    auto cmp = [](const Student& val1, const Student& val2) {return val1.name < val2.name; };    sort(a, a + 3, cmp);    for(Student s: a)        cout << s.ID << ' ' << s.name << endl;    return 0;}

nullptr

http://www.cppblog.com/airtrack/archive/2012/09/16/190828.aspx

实例

#include <iostream>using namespace std;void fun(int a, int *p){    cout << "int *" << endl;}void fun(int a, int p) // 重载fun函数{    cout << "int" << endl;}int main(){    fun(1, NULL);       // int     fun(1, 0);          // int    fun(1, nullptr);    // int *    return 0;}

auto

C++11 重新定义了auto的用途

  • 自动推断出类型
auto a; // 错误,没有初始化表达式,无法推断出a的类型  auto int a = 10;  // 错误,auto临时变量的语义在C++11中已不存在, 这是旧标准的用法。  auto n = 100; // intauto x = 1.5; // doubleauto y = 1.3e12L; // long double
  • auto返回值占位,主要与decltype配合使用,用于返回值类型后置时的占位。
template <typename T1, typename T2>  auto compose(T1 t1, T2 t2) -> decltype(t1 + t2)  {     return t1+t2;  }  auto v = compose(2, 3.14); // v's type is double  

应该注意到,auto并不能作为函数的返回类型,但是你能用auto去代替函数的返回类型,当然,在这种情况下,函数必须有返回值才可以。auto不会告诉编译器去推断返回值的实际类型,它会通知编译器在函数的末段去寻找返回值类型。在上面的那个例子中,函数返回值的构成是由T1类型和T2类型的值,经过+操作符之后决定的。

auto实际上是在编译时对变量进行了类型推导,所以不会对程序的运行效率造成不良影响
另外,似乎auto并不会影响编译速度,因为编译时本来也要右侧推导然后判断与左侧是否匹配

http://blog.csdn.net/huang_xw/article/details/8760403

https://my.oschina.net/wangxuanyihaha/blog/183151


委托构造函数

C++11 中构造函数可以调用同一个类的另一个构造函数

class foo {public:    foo(){};};class boo : public foo {    boo() : foo() {};};

#

0 0
原创粉丝点击