c++11 特性 简单介绍

根据c++ primer第五版总结,可以用来快速回顾一下这些性质

  • long long 类型
    定义为至少有32位那么长。一般没用。

  • 列表初始化
    列表是一组由花括号和逗号组成的元素集合,例如{1,2,3}。
    我们可以使用花括号来进行初始化变量。
    int a{0};
    等号运算符在声明时不是赋值,而是初始化,所以也可以用下面的形式初始化:
    int a = {0};
    这样的效果和int a = 0;是一样的。

  • nullptr 常量
    这是由于在c++11之前,为指针赋值空指针用的是0来直接赋值的。现在使用nullptr更好。nullptr实质上是一个只可以有右值并只能类型转换为指针且值为0地址的一个对象,由此可以解决一些问题,相关资料可以查看如何实现nullptr。

  • constexpr 变量
    const expressions 常量表达式的意思。和const修饰的区别是,const表示这个变量名在之后使用的时候得是常量,而constexpr不仅如此,还要求初始化该变量时使用的表达式必须也为常量才可以。

  • 类型别名
    using uint = unsigned int
    typedef uint unsigned int
    这两句是等价的

  • auto 类型说明符
    声明并定义变量时,求助编译器根据定义类型自动推断声明的变量类型。

  • decltype 类型指示符
    声明变量时,可以使用decltype(expressions)求出表达式的类型,作为被声明变量的类型

  • 类内初始化

    class A {
    public:
        int a = 7;
    };

这等同于之前版本中的:

    class A {
    public:
        int a;
        A() : a(7) {}
    };
  • 使用auto或decltype推断类型
    auto len = line.size(); 自动推断string::size_type更好

  • 范围for语句
    打印字符串中的字符
    for(auto c:str) cout << c << endl;
    类似于Python中的for in语句

  • vector嵌套
    vector<vector<int>这里在旧的编译器上需要有个空格不能让两个尖尖连在一起>

  • 列表初始化vector对象
    vector<string> strs = {"a", "bb", "ccc"};

  • cbegin 和 cend
    返回类型是const_iterator类型的迭代器

  • 在二维数组中使用auto

int mat[3][4];
int main()
{
    for (int(*p)[4] = mat; p != mat + 3; p++)
    {
        /* ... */
    }
    for (auto p = mat; p != mat + 3; p++)
    {
        /* ... */
    }
}
  • 除法取整
    c++11规定除法一律向0取整

  • 列表赋值vector对象
    vector<string> strs;
    strs = {"a", "bb", "ccc"};

  • 139 使用sizeof获取类的成员的大小
    通常情况下只有通过对象才能访问类的成员。但是sizeof可以直接判断成员大小。

  • 168 范围for语句
    在范围for语句中不能增加vector对象的元素,这是因为可能导致范围for语句的end元素变得无效了。这和Python中范围循环可能导致的问题是一样的。

  • 197 initializer_list
    initializer_list是一种模板类型,对象元素永远是常量,类型必须相同。花括号的列表就是这种对象。

  • 203 列表初始化返回值
    return 一个 initializer_list 列表可以对返回类型为vector的对象进行临时量初始化。

  • 206 定义尾置返回类型
    声明一个返回数组指针的函数
    int * func(int i)这样是不太对的,因为返回了一个指针而不是数组指针
    int (* func(int i))[10] 这样的话才是返回大小为10的一个数组指针
    也可以这样写:auto func(int i) -> int(*)[10];

  • 206 使用decltype简化返回类型
    可以使用decltype来简化返回类型,但是这种需求较少见。

  • 214 constexpr 函数
    constexpr 函数是返回类型为字面值的函数,且只能有一条return语句。

  • 237 default默认构造函数
    可以对构造函数赋值等号表示使用编译器提供的默认的构造函数。

  • 246 类内的初始化
    新标准可以在类内就初始化赋值成员

  • 261 委托构造函数
    构造函数初始化时,使用初始值列表来初始化成员。除此之外,还可以使用其他构造函数帮助构造。
    例如构造函数是func(int a,int b)委托构造函数func():func(0,0){}这样就可以当做默认是0,0来构造了。

  • 268 constexpr 构造函数
    用于生成constexpr对象

  • 284 使用string类型来表示文件路径
    在stream类型中,原来只能使用c字符串,现在可以使用string类型的字符串了

  • 293 array 与 forward_list
    非常的快,与手写list速度相当,比数组安全

  • 300 使用列表初始化容器
    list<string> authors = {"milton", "shakespeare", "austen"};
    vector<const char*> articles = {"a", "b", "cc"};

  • 303 容器的非成员swap
    使用swap可以快速交换两个内容的容器

  • 308 使用insert的返回之值
    新标准的insert在插入成功之后返回一个迭代器,该迭代器的位置是指向插入的新元素。使用这个特性可以反复在该位置插入多个元素。

  • 308 使用emplace函数
    使用emplace函数可以实现构造而不是复制。
    使用这个方法可以传入构造函数所所需要的参数而不用构造出对象在2复制一份进取。

  • shrink_to_fit
    对容器调用该函数,会释放多余的vector或者是string所占用的空间。一般没什么用

  • string 类型的数值转换函数
    to_string 表示一组重载函数,可以将int、double类型的数据转换为string类型的数据。
    Stoi 可以将string转换为int,类似的还有其他的函数,包括不同基的、还有浮点数的

  • 346 lambda 表达式
    简单的lambda表达式
    auto f = []{return 42;};
    这里将一个lambda表达式赋值给f。之后可以调用f()获得42
    如何向lambda表达式传递参数?
    [](int a, int b){return a>b;};
    但是有的时候不想传递参数,仍然使得lambda表达式使用外部的变量怎么办?
    [&out](int a, int b){return a<out && out < b;};
    但是我不想让上面这个表达式返回int,而是double怎么办?
    [&out](int a, int b)->double{return a<out && out < b;}

  • 354 bind
    bind函数可以将一个函数的调用改成简单的调用

  • 377 关联容器的列表初始化
    map<string, string> authors={ {"joncy", "james"} };
    set<string> exclude = {"the", "but" };

  • 380 列表初始化pair的返回类型
    return 一个 {}表示的列表到pair类型可以自动转换。

  • 384 pair的列表初始化
    当向map插入pair时,最简单的方式是插入花括号表示的一对键值。插入的内容会初始化为pair插入。

  • 394 无序容器
    map和set前面加上unordered就是无序容器。底层使用hash实现。需要实现存储元素的hash模板。

  • 400 智能指针
    shared_ptr允许多个指针指向同一个对象。unique_ptr则独占所指的对象。
    智能指针是模板,在声明时需要显示提供类型,类似vector的使用。
    shared_ptr<string> p1;

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容