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 ...
随机推荐
- libev ev_io_init学习
#define ev_io_init(ev,cb,fd,events) / do { ev_init ((ev), (cb)); ev_io_set ((ev),(fd),(events)); } w ...
- 如何用cacti监控windwos
1:模版下载地址 https://github.com/mrlesmithjr/cacti resource \ snmp_queries 的文件放到cacti服务器对应的目录下 导入模版文件(在te ...
- Entity Framework之深入分析
EF虽然是一个晚生畸形的ORM框架,但功能强大又具有灵活性的,给了开发人员一定的发挥空间.因为微软出发点总是好的,让开发变得简单,但实际上不是所有的事情都这么理想.这里顺便推荐马丁大叔的书<企业 ...
- 【Spring】基于SpringMVC的图片验证码功能实现
后台实现代码: ImgController.java 文件 package cn.shop.controller; import java.awt.Color; import java.awt.Fon ...
- C#创建文件夹并设置权限
原文地址:https://www.cnblogs.com/top5/archive/2010/04/12/1710141.html /* 需要添加以下命名空间: using System.IO; ...
- 《JAVA与模式》之单例模式(转载)
原文地址:http://blog.csdn.net/jason0539/article/details/23297037 概念: java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例.饿 ...
- mysql主从复制配置问题
一,基本步骤 1,创建在主从数据上都创建复制账号,权限选上super, replication slave , replication master(选上这个可以方便从库变成主库): 2,配置主库和备 ...
- sql改写or 改成union不等价数据变多
select count(*) from (SELECT A.* FROM (SELECT CD.*, nvl(CV.SUM_CI_BALANCE, 0) as SUM_CI_BALANCE, nvl ...
- Python字符串与二进制串的相互转换
python基础知识之字符编码与转换 - 机壳啦 - 博客园https://www.cnblogs.com/home979/p/7838244.html Python 字符串与二进制串的相互转换 - ...
- STM32定时器T2纯软件仿真时间准确,JTAG在线调试查看时间不准的问题
通过查看Sec的值和上次中断的差值计算的,虽然这个值是不准的 ,但实际上时间是准的, 原因如下:stm32在调试模式下虽然进断点之后程序停止了,但定时器的时钟还在走,计数器还在计数,若要在产生断点时计 ...