c++ primer读书笔记之c++11(二)
2015-09-09 00:00
513 查看
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文件中。
相关文章推荐
- c++ primer读书笔记之c++11(一)
- c++ primer读书笔记之c++11(四)
- 2015-06学习总结——c++
- c++ primer读书笔记之c++11(三)
- c语言中条件编译相关的预编译指令
- c++中虚函数和纯虚函数的作用与区别
- C++ <int、long、long long 最大及最小值>
- C语言中sizeof和strlen的区别与联系
- 深入分析C++中声明与定义的区别
- 关于 const char* p , char const* p 以及 char * const p
- C++ 奇葩的空语句
- C++中 引用&与取地址&的区别
- 【面试算法系列】替换字符串中的空格为其他字符 - C语言实现
- C++中引用(&)的用法和应用实例
- effective c++:了解c++默默编写并调用了哪些函数
- C++浅拷贝和深拷贝的区别
- C++拷贝构造函数详解
- c++树,知道前序和中序求后序遍历
- C++的重载、隐藏和重写
- C++关联容器