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中没有介绍。后续可以参考下其他资料继续完善下。

c++ primer读书笔记之c++11(四)的更多相关文章

  1. c++ primer读书笔记之c++11(三)

    1 =default构造函数限定符 c++11针对构造函数提供了=default限定符,可以用于显式指定编译器自动生成特定的构造函数.析构或赋值运算函数.参考代码如下: class CtorDftTy ...

  2. c++ primer读书笔记之c++11(二)

    1 新的STL模板类型,std::initializer_list<T> c++11添加了initializer_list模板类型,用于提供参数是同类型情况的可变长度的参数传递机制,头文件 ...

  3. c++ primer读书笔记之c++11(一)

    1 新的关键词nullptr c++11引入新的关键词nullptr,用于表示空指针,用于替换之前c提供的NULL(最初NULL是定义在stdlib中的宏定义,通常是0). 2 新的别名定义机制 al ...

  4. C++ Primer 读书笔记:第11章 泛型算法

    第11章 泛型算法 1.概述 泛型算法依赖于迭代器,而不是依赖容器,需要指定作用的区间,即[开始,结束),表示的区间,如上所示 此外还需要元素是可比的,如果元素本身是不可比的,那么可以自己定义比较函数 ...

  5. Key Technologies Primer 读书笔记,翻译 --- Struct 学习 1

    原文链接:https://struts.apache.org/primer.html 本来想写成读书笔记的,结果还是变成翻译,谨作记录,学习.   1.HTML -- 见我前面文章 2.Interne ...

  6. c++ primer 读书笔记

    顺序容器:为程序提供控制元素存储和访问顺序的能力,这种顺序与元素加入到容器时的位置相对应,而与元素值无关. 另外还有根据关键字的值来存储元素的容器:有序.无序关联容器. 另外STL还有三种容器适配器, ...

  7. 【读书笔记】2016.11.19 北航 《GDG 谷歌开发者大会》整理

    2016.11.19 周六,我们在 北航参加了<GDG 谷歌开发者大会>,在web专场,聆听了谷歌公司的与会专家的技术分享. 中午免费的午餐,下午精美的下午茶,还有精湛的技术,都是我们队谷 ...

  8. 读书笔记_Effective_C++_条款四十一:了解隐式接口和编译期多态

    从本条款开始,就进入了全书的第七部分:模板与泛型编程.模板与泛型在C++中是非常重要的部分,还记得本书第一章时,把C++视为一个联邦,它由四个州政府组成,其中一个政府就是模板与泛型了. 本条款是一个介 ...

  9. string,vector和array(C++ Primer读书笔记)

    string string是标准库类型,使用时需要包涵头文件,使用using声明. include <string> using std::string; 1.定义和初始化 string ...

随机推荐

  1. iOS Main Thread Checker: UI API called on a background thread的解释

    Xcode打印栏出现如下警告: Main Thread Checker: UI API called on a background thread 这个是什么错误呢? 其实这并不一定是错误,也可以理解 ...

  2. aligned_storage简单学习

    #include <iostream> #include <type_traits> #include <string> /* template< std:: ...

  3. libgdx游戏引擎教程

    第一讲:libgdx游戏引擎教程(一)性能优良的游戏引擎—libgdx http://www.apkbus.com/android-57355-1-1.html 第二讲: libgdx游戏引擎教程(二 ...

  4. linux shell 脚本攻略学习13--file命令详解,diff命令详解

    一.file命令详解 find命令可以通过查看文件内容来找出特定类型的文件,在UNIX/ Linux系统中,文件类型并不是由文件扩展名来决定的(windows中却正是这么做的),file命令的目的是从 ...

  5. c语言之函数参数传递之数组篇(转)

    在VC中写程序都习惯了,一般数组作为函数实参时,最常用的方法就是引用和指针的方法,但是到C语言中就没有引用了,还有一种比较常用的方法: #include <stdio.h>void sor ...

  6. lamp虚拟主机的常用配制选项

    <VirtualHost *:80>    ServerAdmin m.koobird.com    DocumentRoot "/var/www/html/xinyou&quo ...

  7. android image加载中等待动画

    在布局中添加一个ImageViw和一个EditText. <ImageView android:id="@+id/loading_imageView_info" androi ...

  8. hibernate使用注解设置日期默认值

    用注解设置属性的默认值时 使用 @Temporal(TemporalType.TIMESTAMP) @Column(updatable = false,nullable=false,length=20 ...

  9. MongoDB学习笔记(6)--find

    MongoDB 查询文档 MongoDB 查询文档使用 find() 方法. find() 方法以非结构化的方式来显示所有文档. 语法 MongoDB 查询数据的语法格式如下: db.collecti ...

  10. Loader Lock引起的一个Bug

    在Windows中,让程序模块化实现的一种方式,就是让事实上现为动态链接库. 然后在主程序启动的时候隐式或者显示的去载入动态链接库.可是假设不恰当的编写动态链接库的DllMain函数,将会引起意想不到 ...