c++ primer读书笔记之c++11(二)
1 新的STL模板类型,std::initializer_list<T>
c++11添加了initializer_list模板类型,用于提供参数是同类型情况的可变长度的参数传递机制,头文件是<initializer_list>。
其具体接口可参考cplusplus.com的介绍,地址如下:http://www.cplusplus.com/reference/initializer_list/initializer_list/?kw=initializer_list
#include <initializer_list> // for testing , write using refrence here
using std::cout;
using std::endl;
using std::initializer_list; // 测试变长参数
void TestVariadicParams(initializer_list<int> iz)
{
cout << "initializer_list test" << endl;
for (const auto & r: iz)
cout << r << " ";
cout << endl;
} // 调用方法
TestVariadicParams({,,});
2 新的函数声明形式(函数返回类型后置)
代码如下:
// 函数返回类型后置 trailing return type
// 返回值为指向int[10]的指针
auto Func(int) -> int(*)[]; // 返回指向even[4]的指针
int even[] = {,,,};
decltype(even) * GetPtr(int);
提供了更加灵活的函数定义和声明机制。
3 新的关键字constexpr
c++11提供了新的关键字constexpr,用于限定函数返回值或者当前表达式是常量,编译器会在编译时静态检查constexpr修饰的函数返回值或者变量。一定程度上简化数组定义时长度需要必须指定为const的限制。
4 代理构造函数 delegating constructor
为了解决在多个不同构造函数之间共享初始化代码的情况,c++11引入了代理构造函数,能够实现将多个构造函数共享的初始化代码委托到一个或多个构造函数上。示例代码如下:
// delegating constructor
class DAType
{
public:
DAType(int x, int y):m_x(x), m_y(y){}
DAType(int y): DAType(,y){} private:
int m_x;
int m_y;
};
5 string和数字类型的转换函数
c++11提供了新的字符串std::string和数值类型的转换函数,这就大大减轻了使用c++的I/O机制的痛苦,也降低了使用C函数库的可能。可惜mingw32不支持to_string的编译、mingw64据说支持。这里仅给出示例代码。
string to_string (int val);
string to_string (long val);
string to_string (long long val);
string to_string (unsigned val);
string to_string (unsigned long val);
string to_string (unsigned long long val);
string to_string (float val);
string to_string (double val);
string to_string (long double val);
字符串转数值类型的函数:
stoi //Convert string to integer (function template )
stol //Convert string to long int (function template )
stoul //Convert string to unsigned integer (function template )
stoll //Convert string to long long (function template )
stoull //Convert string to unsigned long long (function template )
stof //Convert string to float (function template )
stod //Convert string to double (function template )
stold //Convert string to long double (function template )
6 提供了Lambda表达式和新的bind机制
Lambda表达式可以认识是匿名、内联函数的语法机制,其具体语法建议参考标准文档,或者c++primer Ch 10.3章节。
新的bind函数支持更加灵活的参数绑定机制,相对于以前的STL内部的bind1st、bind2nd好用多了。
附加说明
本文内容主要是关于 c++ primer 第五版的第5章到第十二章中涉及c++11内容的整理。
所有代码都在gcc v4.8.1的版本中编译测试过,相关源码可以从我的git下载,url如下:https://git.oschina.net/Tocy/SampleCode.git,位于c++11目录下的cpp_primer_test2.cpp文件中。
c++ primer读书笔记之c++11(二)的更多相关文章
- c++ primer读书笔记之c++11(三)
1 =default构造函数限定符 c++11针对构造函数提供了=default限定符,可以用于显式指定编译器自动生成特定的构造函数.析构或赋值运算函数.参考代码如下: class CtorDftTy ...
- c++ primer读书笔记之c++11(四)
1 带有作用域的枚举 scoped-enumeration 相信大家都用过枚举量,都是不带有作用域的,在头文件中定义需要特别注意不要出现重名的情况.为了解决这种问题,c++11提供了带作用于的枚举. ...
- 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 ...
- string,vector和array(C++ Primer读书笔记)
string string是标准库类型,使用时需要包涵头文件,使用using声明. include <string> using std::string; 1.定义和初始化 string ...
- c++ primer 读书笔记
顺序容器:为程序提供控制元素存储和访问顺序的能力,这种顺序与元素加入到容器时的位置相对应,而与元素值无关. 另外还有根据关键字的值来存储元素的容器:有序.无序关联容器. 另外STL还有三种容器适配器, ...
- 【读书笔记】2016.11.19 北航 《GDG 谷歌开发者大会》整理
2016.11.19 周六,我们在 北航参加了<GDG 谷歌开发者大会>,在web专场,聆听了谷歌公司的与会专家的技术分享. 中午免费的午餐,下午精美的下午茶,还有精湛的技术,都是我们队谷 ...
- 函数(C++ Primer读书笔记)
C++ Primer 第五版课后题 练习6.32 :下面的函数合法吗?如果合法,说明其功能:如果不合法,修改其中的错误并解释原因. #include <iostream> using na ...
随机推荐
- Android开发环境——连接驱动ADB相关内容汇总
Android开发环境将分为SDK相关内容.Eclipse ADT相关内容.模拟器AVD相关内容.调试器DDMS相关内容.日志LogCat相关内容.连接驱动ADB相关内容.内存泄露检测工具MAT相关 ...
- TCP连接建立与释放
tcp建立连接 tcp连接的建立需要经历”三次握手“的过程.过程如下 client发送SYN包(值为j)以及SEQ包到server端,此时client进入SYN_SEND状态.此为第一次握手. ser ...
- Linux主要shell命令详解(中)
shell中的特殊字符 shell中除使用普通字符外,还可以使用一些具有特殊含义和功能的特殊字符.在使用它们时应注意其特殊的含义和作用范围.下面分别对这些特殊字符加以介绍. 1. 通配符 通配符用于模 ...
- linux RPM包安装、更新、删除等操作命令简明总结, 如何查看yum安装的软件路径 ?
rpm -ivh package.rpm 安装一个rpm包rpm -ivh --nodeeps package.rpm 安装一个rpm包而忽略依赖关系警告rpm -U package.rpm 更新一个 ...
- 【基础】centos 6.X 下修改图形界面为命令行界面(单用户救援模式)
1. Linux开机引导的时候,按键盘上的e 就可以进入进入GRUB菜单界面. 2.在出现GRUB引导画面时(CentOS(2.6.18-274**)),按字母e键,进入GRUB编辑状态: 3.把光标 ...
- Oracle pl/sql导入sql文件,插入更新数据,中文乱码问题解决方案
http://szh-java.iteye.com/blog/1869360 问题描述:用a.sql文件执行insert或update,不论是通过pl/sql还是sqlplus环境下执行,@文件名执行 ...
- SPI、I2C、UART三种串行总线协议的区别和SPI接口介绍(转)
SPI.I2C.UART三种串行总线协议的区别 第一个区别当然是名字: SPI(Serial Peripheral Interface:串行外设接口); I2C(INTER IC BUS) UART( ...
- Rplidar学习(一)—— 开发套件初识
一.简介 RPLIDAR A1 开发套装包含了方便用户对 RPLIDAR A1 进行性能评估和早期开发所需的配套工具. 用户只需要将 RPLIDAR A1 模组与 PC 机连接,即可在配套的评估软件中 ...
- HDU 4302 Holedox Eating (STL + 模拟)
Holedox Eating Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- 类名.class和getClass()区别
class叫做“类字面量”,因class是关键字, 所以class编译时确定,getclass()运行时根据实际实例确定.String.class 是能对类名的引用取得在内存中该类型class对象的引 ...