zoukankan      html  css  js  c++  java
  • c++ primer读书笔记之c++11(四)

    1  带有作用域的枚举 scoped-enumeration

    相信大家都用过枚举量,都是不带有作用域的,在头文件中定义需要特别注意不要出现重名的情况。为了解决这种问题,c++11提供了带作用于的枚举。可以使用class EnumName定义,示例代码如下:

    enum {ZERO, ONE, TWO};
    enum class color {RED, BLUE, GREEN};

    上面的是没有作用域的枚举定义形式,下面是带有作用域的枚举定义形式,调用带有作用域的枚举必须指定作用域,否则会编译出错。

    还有一个比较大的区别就是,带有作用域的枚举量不能自动转换为int类型,而没有作用域的枚举量是可以的。

    2 枚举的长度和前向声明

    c++11针对枚举类型提供了声明枚举类型占用字节长度的机制,可在枚举名之后加上类型限定,代码如下:

    enum CtrlType: unsigned long long
    {CT_0, CT_1};

    同时,c++11提供了枚举的前向声明机制。如下代码:

    // enum forward declaration
    enum InitValues: long long; // unscoped, must specify a size
    enum class NewColor; // default int

    3 嵌套类、内部类的定义

    这个部分不是c++11新加的内容,只是个人感觉比较有趣和可用的定义形式。内部类的可以仅在外部类中声明,而不需要直接给出定义式。示例代码如下:

    // nested class
    class OuterClass
    {
        class InnerClass;
    };
    
    class OuterClass::InnerClass
    {
        
    };

    外部类OutClass有点像命名空间的性质了。

    4 共用体支持包含带有构造函数的类成员

    有时候使用union,会存在一个比较大的限制,所有的union成员必须没有构造函数,因为共用体不知道如何初始化和反初始化。

    在c++11中允许union定义包含带有构造函数的成员,代码如下:

    // union with class member
    union UnionTest
    {
        int a;
        std::string str;
    };

    但是在使用的时候,我们必须维护union中的数据有效性,编译器依然不知道如何构造和析构union中的变量。慎用!!

    5 标准库中添加tuple、支持正则表达式、支持新的随机数生成机制

    tuple是对pair的扩展,支持任意数目任意类型的多元组。多数用于多个数据合成一个元素,但是又不想定义新的结构体或类的情况下。具体tuple的用于建议参考:http://www.cplusplus.com/reference/tuple/

    c++11中STL引入了随机数生成器(random-number engine)和随机数分配类(random-number distribution class),二者配合可以生成指定范围、指定类型、指定分布的随机数。

    由于正则表达式,本人不是很熟悉,这里不做介绍了。有兴趣的可以阅读下c++ primer ch 17.3或者c++11标准。

    附加说明

    本文内容主要是关于 c++ primer 第五版的第16章到第19章中涉及c++11内容的整理。涉及枚举、共用体、嵌套类的新的用法。

    所有代码都在gcc v4.8.1的版本中编译测试过,相关源码可以从我的git下载,url如下:https://git.oschina.net/Tocy/SampleCode.git,位于c++11目录下的cpp_primer_test4.cpp文件中。

    根据其他资料介绍,c++11也支持线程机制,可惜c++ primer中没有介绍。后续可以参考下其他资料继续完善下。

  • 相关阅读:
    计算机操作系统之进程管理
    剑指offer——两个链表的第一个公共结点
    剑指offer——数字在排序数组中出现的次数
    剑指offer——二叉树的深度与平衡二叉树的判断
    剑指offer——数组中只出现一次的数字
    剑指offer——和为s的两个数字VS和为s的连续正数序列
    剑指offer——翻转单词顺序VS左旋转字符串
    剑指offer——扑克牌的顺子
    剑指offer——圆圈中最后剩下的数字
    剑指offer——求1+2+...+n
  • 原文地址:https://www.cnblogs.com/tocy/p/cpp-primer-std11-new-traits-4.html
Copyright © 2011-2022 走看看