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 ...
随机推荐
- MATLAB 的循环语句
1.MATLAB while循环语法 在MATLAB 中 while循环的语法如下: while <expression> <statements> end while 循环反 ...
- 【DeepLearning】Exercise:Convolution and Pooling
Exercise:Convolution and Pooling 习题链接:Exercise:Convolution and Pooling cnnExercise.m %% CS294A/CS294 ...
- Jetty使用内存过大的解决方案
之前用Jetty做过一个消息通知服务器,主要功能就是其他各个子系统如果有需要push给客户端消息的就把这个消息发给我的Server,我用WebSocket来推送给客户端~ 程序上线一段时间之后运维工程 ...
- wait3和wait4函数(转)
wait3和wait4函数除了可以获取子进程状态转变信息外,还可以获得子进程的资源使用信息. pid_t wait3 ( int *status, int option, struct rusage ...
- 【HTML】网页中如何让DIV在网页滚动到特定位置时出现
用js或者jquery比较好实现.但你要知道,滚动到哪个特定位置,例如滚动到一个标题h3那显示这个div,那么可以用jquery算这个h3距离网页顶部的距离:$("h3").off ...
- Docker K8s基本概念入门
原文地址:https://blog.csdn.net/TM6zNf87MDG7Bo/article/details/79621510 k8s是一个编排容器的工具,其实也是管理应用的全生命周期的一个工具 ...
- .Net jsc.exe 编译js 成exe
- MongoDB学习笔记(2)
MongoDB 创建数据库 语法 MongoDB 创建数据库的语法格式如下: use DATABASE_NAME 如果数据库不存在,则创建数据库,否则切换到指定数据库. 实例 以下实例我们创建了数据库 ...
- nmapport状态解析
- Redis 的安装与使用(单节点)
Redis 的安装与使用(单节点) 环境:CentOS 6.5 Redis 版本:redis-3.0 (考虑到Redis3.0 在集群和性能提升方面的特性,rc 版为正式版的候选版,而且 很快就出 ...