文档章节

c++ primer读书笔记之c++11(二)

Tocy
 Tocy
发布于 2015/09/09 22:15
字数 822
阅读 17
收藏 0

 

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

与vector不同的是,initializer_list对象中的元素永远是常量值,我们无法改变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({1,4,7});

2 新的函数声明形式(函数返回类型后置)

代码如下:

// 函数返回类型后置 trailing return type
// 返回值为指向int[10]的指针
auto Func(int) -> int(*)[10];

// 返回指向even[4]的指针
int even[] = {2,4,6,8};
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(0,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文件中。

 

© 著作权归作者所有

共有 人打赏支持
Tocy
粉丝 27
博文 50
码字总数 59635
作品 0
海淀
程序员
私信 提问
《C++ primer》读后感:时代的经典

说起Lippman的C++ Primer,我总是有种特殊感情。这本书既是我进入C++领域的敲门砖,也是我第一次在网络上发表技术文章的对象。当年读书笔记中的青涩迷惘和年少轻狂都还历历在目,转眼已经从第...

凌杰_owlman
2018/05/15
0
0
从「林」开始--C++ primer 读书笔记 -- Part II: Containers ...

从「林」开始--C++ primer 读书笔记 -- Part II: Containers and Algorithms ###################################################### // 声明 : 1 笔记基本都是从《C++ Primer第四版中英文......

ll124884135
2012/04/13
0
0
11月推荐给程序员们的四本书

难得在家休息一段时间,职业病的原因吧,推荐技术书的习惯一时间没能改变。借着自己的微信平台,每天向大家推荐一些靠谱的内容,希望大家能喜欢。 先跟着我来看我今天推荐的第一本书吧! C+...

生气的散人
2013/11/11
960
2
《深度探索C++对象模型》读书笔记(1)

《深度探索C++对象模型》读书笔记(1)。 在C++中,有两种class data members:static和nonstatic,以及三种class member functions:static、nonstatic和virtual.已知下面这个class Point声...

长平狐
2012/10/08
68
0
【2018.08.13 C与C++基础】C++语言的设计与演化读书笔记

先占坑 老实说看这本书的时候,有很多地方都很迷糊,但却说不清楚问题到底在哪里,只能和Effective C++联系起来,更深层次的东西就想不到了。 链接: https://blog.csdn.net/cloudqiu/artic...

waitingdeng
2018/08/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

《人月神话》读后感

前两天看完了《人月神话》,最初是被这本书的名字吸引了,然后再在上搜了一下,人月确实是一个神话,那种不可能实现的神话……(!| ̄▽ ̄) 好久没有看过这种每章开始都引用一段名人名言的书了...

ninjaFrog
昨天
3
0
matlab-线性代数 施密特正交化

  matlab : R2018a 64bit     OS : Windows 10 x64 typesetting : Markdown    blog : my.oschina.net/zhichengjiu    gitee : gitee.com/zhichengjiu   code clearclc% 施密特正......

志成就
昨天
2
0
08 分支管理 —— 多人协作

08 分支管理 —— 多人协作 多人协作 本节内容: 查看远程库信息,使用git remote -v;本地新建的分支如果不推送到远程,对其他人就是不可见的;从本地推送分支,使用git push origin bra...

lwenhao
昨天
4
0
开始使用Filebeat

认识Beats Beats是用于单用途数据托运人的平台。它们以轻量级代理的形式安装,并将来自成百上千台机器的数据发送到Logstash或Elasticsearch。 (画外音:通俗地理解,就是采集数据,并上报到...

北极南哥
昨天
6
0
shell getopts template

!/bin/bash# ------------------------------------------------------------------# [Author] Title# Description# ---------------------------------------------------......

易野
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部