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中没有介绍。后续可以参考下其他资料继续完善下。
c++ primer读书笔记之c++11(四)的更多相关文章
- c++ primer读书笔记之c++11(三)
1 =default构造函数限定符 c++11针对构造函数提供了=default限定符,可以用于显式指定编译器自动生成特定的构造函数.析构或赋值运算函数.参考代码如下: class CtorDftTy ...
- c++ primer读书笔记之c++11(二)
1 新的STL模板类型,std::initializer_list<T> c++11添加了initializer_list模板类型,用于提供参数是同类型情况的可变长度的参数传递机制,头文件 ...
- c++ primer读书笔记之c++11(一)
1 新的关键词nullptr c++11引入新的关键词nullptr,用于表示空指针,用于替换之前c提供的NULL(最初NULL是定义在stdlib中的宏定义,通常是0). 2 新的别名定义机制 al ...
- C++ Primer 读书笔记:第11章 泛型算法
第11章 泛型算法 1.概述 泛型算法依赖于迭代器,而不是依赖容器,需要指定作用的区间,即[开始,结束),表示的区间,如上所示 此外还需要元素是可比的,如果元素本身是不可比的,那么可以自己定义比较函数 ...
- Key Technologies Primer 读书笔记,翻译 --- Struct 学习 1
原文链接:https://struts.apache.org/primer.html 本来想写成读书笔记的,结果还是变成翻译,谨作记录,学习. 1.HTML -- 见我前面文章 2.Interne ...
- c++ primer 读书笔记
顺序容器:为程序提供控制元素存储和访问顺序的能力,这种顺序与元素加入到容器时的位置相对应,而与元素值无关. 另外还有根据关键字的值来存储元素的容器:有序.无序关联容器. 另外STL还有三种容器适配器, ...
- 【读书笔记】2016.11.19 北航 《GDG 谷歌开发者大会》整理
2016.11.19 周六,我们在 北航参加了<GDG 谷歌开发者大会>,在web专场,聆听了谷歌公司的与会专家的技术分享. 中午免费的午餐,下午精美的下午茶,还有精湛的技术,都是我们队谷 ...
- 读书笔记_Effective_C++_条款四十一:了解隐式接口和编译期多态
从本条款开始,就进入了全书的第七部分:模板与泛型编程.模板与泛型在C++中是非常重要的部分,还记得本书第一章时,把C++视为一个联邦,它由四个州政府组成,其中一个政府就是模板与泛型了. 本条款是一个介 ...
- string,vector和array(C++ Primer读书笔记)
string string是标准库类型,使用时需要包涵头文件,使用using声明. include <string> using std::string; 1.定义和初始化 string ...
随机推荐
- Swift3 JSON字符串和字典互转(JSON字符串转字典和字典转JSON字符串)
直接上代码吧 1.JSONString转换为字典 /// JSONString转换为字典 /// /// - Parameter jsonString: <#jsonString descrip ...
- 自定义cnblogs样式小结
写在前面: 博客模版(皮肤)很多, 这里选择了一套相对"干净"的模版, 这套模版本身已经很好了, 简约大方, 在此基础上进行改动一下. 1.页面背景图源自网络. 2.回到顶部i ...
- java struts2入门学习--OGNL语言常用符号和常用标签学习
一.OGNL常用符号(接上一篇文章): 1.#号 1)<s:property value="#request.username"/> 作用于struts2的域对象,而不 ...
- 以太网,IP,TCP,UDP数据包分析【转】
原文地址:http://www.cnblogs.com/feitian629/archive/2012/11/16/2774065.html 1.ISO开放系统有以下几层: 7 应用层 6 表示层 5 ...
- MySQL 分区表原理及数据备份转移实战
MySQL 分区表原理及数据备份转移实战 1.分区表含义 分区表定义指根据可以设置为任意大小的规则,跨文件系统分配单个表的多个部分.实际上,表的不同部分在不同的位置被存储为单独的表.用户所选择的.实现 ...
- python学习笔记——爬虫学习中的重要库urllib
1 urllib概述 1.1 urllib库中的模块类型 urllib是python内置的http请求库 其提供了如下功能: (1)error 异常处理模块 (2)parse url解析模块 (3)r ...
- dbms_random.seed
语法: DBMS_RANDOM.SEED ( val IN BINARY_INTEGER); DBMS_RANDOM.SEED ( val IN VARCHAR2); val: Seed number ...
- Oracle 12C -- ADR结构
ADR路径由参数diagnostic_dest参数决定: SQL> show parameter diagnostic_dest NAME TYPE VALUE ---------------- ...
- CListCtrl的LVN_KEYDOWN事件中怎么捕捉不到回车键?
原文链接: http://computer-programming-forum.com/81-vc/c92ab6e6d6ac92bc.htm 楼主 How to handle the return k ...
- 数据库查询实例(包含所有where条件例子)
查询指定列 [例1] 查询全体学生的学号与姓名. SELECT Sno,Sname FROM Student: [例2] 查询全体学生的姓名.学号.所在系. SELECT Sname,Sno,Sdep ...