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({,,});

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(二)的更多相关文章

  1. c++ primer读书笔记之c++11(三)

    1 =default构造函数限定符 c++11针对构造函数提供了=default限定符,可以用于显式指定编译器自动生成特定的构造函数.析构或赋值运算函数.参考代码如下: class CtorDftTy ...

  2. c++ primer读书笔记之c++11(四)

    1  带有作用域的枚举 scoped-enumeration 相信大家都用过枚举量,都是不带有作用域的,在头文件中定义需要特别注意不要出现重名的情况.为了解决这种问题,c++11提供了带作用于的枚举. ...

  3. c++ primer读书笔记之c++11(一)

    1 新的关键词nullptr c++11引入新的关键词nullptr,用于表示空指针,用于替换之前c提供的NULL(最初NULL是定义在stdlib中的宏定义,通常是0). 2 新的别名定义机制 al ...

  4. C++ Primer 读书笔记:第11章 泛型算法

    第11章 泛型算法 1.概述 泛型算法依赖于迭代器,而不是依赖容器,需要指定作用的区间,即[开始,结束),表示的区间,如上所示 此外还需要元素是可比的,如果元素本身是不可比的,那么可以自己定义比较函数 ...

  5. Key Technologies Primer 读书笔记,翻译 --- Struct 学习 1

    原文链接:https://struts.apache.org/primer.html 本来想写成读书笔记的,结果还是变成翻译,谨作记录,学习.   1.HTML -- 见我前面文章 2.Interne ...

  6. string,vector和array(C++ Primer读书笔记)

    string string是标准库类型,使用时需要包涵头文件,使用using声明. include <string> using std::string; 1.定义和初始化 string ...

  7. c++ primer 读书笔记

    顺序容器:为程序提供控制元素存储和访问顺序的能力,这种顺序与元素加入到容器时的位置相对应,而与元素值无关. 另外还有根据关键字的值来存储元素的容器:有序.无序关联容器. 另外STL还有三种容器适配器, ...

  8. 【读书笔记】2016.11.19 北航 《GDG 谷歌开发者大会》整理

    2016.11.19 周六,我们在 北航参加了<GDG 谷歌开发者大会>,在web专场,聆听了谷歌公司的与会专家的技术分享. 中午免费的午餐,下午精美的下午茶,还有精湛的技术,都是我们队谷 ...

  9. 函数(C++ Primer读书笔记)

    C++ Primer 第五版课后题 练习6.32 :下面的函数合法吗?如果合法,说明其功能:如果不合法,修改其中的错误并解释原因. #include <iostream> using na ...

随机推荐

  1. HDUOJ-----Computer Transformation

    Computer Transformation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/ ...

  2. keras的训练引擎:train_array.py和train_generator.py

    keras的Model支持两种模式的训练: 直接传入数组,最终会调用train_array.py中的fit_loop()函数 直接传入生成器,最终会调用train_generator.py中的fit_ ...

  3. POJ 2676 Sudoku (DFS)

    Sudoku Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 11694   Accepted: 5812   Special ...

  4. 如何用cacti监控windwos

    1:模版下载地址 https://github.com/mrlesmithjr/cacti resource \ snmp_queries 的文件放到cacti服务器对应的目录下 导入模版文件(在te ...

  5. Android应用截图方法

    在Android应用开发过程中,可能会遇到需要对整个界面或者某一部分进行截图的需求.Android中对View的截图也有很多中方式: 使用DrawingCache 直接调用View.draw Draw ...

  6. Html中 <tr> 标签的隐藏与显示

    TR标签的隐藏与显示:block(显示)和none(隐藏) <tr  style="display:none"> <tr id="sample" ...

  7. linux文件系统 - 初始化(一)

    术语表: struct task:进程 struct mnt_namespace:命名空间 struct mount:挂载点 struct vfsmount:挂载项 struct file:文件 st ...

  8. java与C++之间进行SOCKET通讯要点简要解析

    原文链接: http://blog.csdn.net/hslinux/article/details/6214594 java与C++之间进行SOCKET通讯要点简要解析 hslinux 0.篇外语 ...

  9. Shell脚本开发规范

    一.前言 由于工作需要,最近重新开始拾掇shell脚本.虽然绝大部分命令自己平时也经常使用,但是在写成脚本的时候总觉得写的很难看.而且当我在看其他人写的脚本的时候,总觉得难以阅读.毕竟shell脚本这 ...

  10. stm32定时器PWM模式和输出比较模式

    pwm模式是输出比较模式的一种特例,包含于输出比较模式中 /** @defgroup TIM_Output_Compare_and_PWM_modes * @{ */ #define TIM_OCMo ...