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 ...
随机推荐
- keras中的模型保存和加载
tensorflow中的模型常常是protobuf格式,这种格式既可以是二进制也可以是文本.keras模型保存和加载与tensorflow不同,keras中的模型保存和加载往往是保存成hdf5格式. ...
- 【总结 】550,535,553 Mail from must equal authorized user— jenkins(hudson) email163邮箱和26邮箱成功配置总结
Failed to send out e-mail com.sun.mail.smtp.SMTPSendFailedException: 553 Mail from must equal author ...
- 魅族MX四核手机转让,二手淘宝上+hi-pda论坛结合使用成功已出
2013-3-14 内容存档在evernote,笔记名"魅族MX四核手机转让,二手淘宝上+hi-pda论坛结合使用成功已出"
- 【Oracle】Oracle自定义的函数与过程
本篇主要内容如下: 6.1 引言 6.2 创建函数 6.3 存储过程 6.3.1创建过程 6.3.2调用存储过程 6.3.3 AUTHID 6.3.4 PRAGMA AUTONOMOUS_TRANSA ...
- Swift 基本运算符
前言 Swift 语言支持大部分标准 C 语言的运算符,并且改进了许多特性来使我们的代码更加规范,其中主要包含算数运算符.区间运算符.逻辑运算符.关系运算符.赋值运算符.自增自减运算符.溢出运算符等. ...
- Linux 性能測试工具
Linux 性能測试工具 linux performance 查看系统配置 查看CPU信息 lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64- ...
- 还没被玩坏的robobrowser(8)——robobrowser的实现原理
背景 学习使用工具实际上不难,不过我们应该通过阅读工具源码来提升自己的水平. 多读代码,读好代码.很不错,robobrowser的代码简单易懂,值得学习. 预备知识 源码地址 一起其实是从browse ...
- 基于C/S模式的android手机与PC机通信系统的开发
原文链接: http://blog.csdn.net/nupt123456789/article/details/8213486 基于C/S模式的android手机与PC机通信系统的开发 作者:郑海波 ...
- [转]Class.forName()的作用与使用总结
1.Class类简介: Java程序在运行时,Java运行时系统一直对所有的对象进行所谓的运行时类型标识.这项信息纪录了每个对象所属的类.虚拟机通常使用运行时类型信息选准正确方法去执行,用来保存这些类 ...
- struts2 常量
struts.i18n.encoding 指定web应用的默认编码集