C++真的是一门新的语言. 如果在C++11, 即C++2.0没有跟上的同学, 再过一两个版本, 基本上看不懂C++代码了.
前面已经陆陆续续把大部分
C++11
的新特性全部都说完了, 这里带一下剩下的
推荐书籍
C++ Primer, 2012
The C++ programming Language C++ 2013.
Effective Modern C++ 2014. –推荐.
编译器支持
ISOC++11支持, GNUC++11支持.
总之要记得调整你的compiler选项.
代码中主要检查相关的宏:
1 |
|
模板参数的括号问题
右移操作符和连续模板包含中的空格问题
1 | vector<list<int> >; |
不多解释了.
委托构造
C++03里面, 从一个构造调用同一个类的另外一个构造, 其实是在初始化另外一段内存空间,
它一般是不允许你这么做(不像Java那么灵活; 或者允许你这么做, 但是实际上产生的是临时对象), 但是现在好了, C++允许了.
(可能要借助完美转发实现委托构造)
举个例子:
1 | class M |
#2
就是所谓的委托构造函数, 调用了真正的构造函数#1
.
新的算法
主要是 all_of()、any_of() 和 none_of(), copy_n().
1 |
|
以及copy_n
:1
2
3
4
5
int source[5]={0,12,34,50,80};
int target[5];
//从 source 拷贝 5 个元素到 target
copy_n(source,5,target);
iota() 算法可以用来创建递增序列,它先把初值赋值给 *first,然后用前置 ++ 操作符增长初值并赋值到给下一个迭代器指向的元素,如下:1
2
3
4
5
int a[5]={0};
char c[3]={0};
iota(a, a+5, 10); //changes a to {10,11,12,13,14}
iota(c, c+3, 'a'); //{'a','b','c'}
array容器
其实就是封装了数组, 主要方法是size, begin, end, 当然还有at等方法.
1 | //int myArray[10]; |
这样可以使用标准库更多的算法等.
不过也会失去这样做的好处
1 | typedef int T[100]; |
我一般不适用 array, 还是直接使用原始数组.
越做越复杂的东西, 很烦的.
override
重写父类的虚函数, 可以在函数名字后面, 实现大括号前面, 加上override
, 让编译器帮助检查函数声明, 确保一致.
final
两个作用, 情景:
- 用于类, 不让别人再继承, 表明自己是继承体系的最后一个类.
- 用于虚函数, 子类则不可以重写.
本篇的确没有什么深度, 权当记载了吧.