这几天把C++ 11的语言特性刷了一下(为毛这上面的图标好丑。。),总结一下也说说自己的一点看法。
个人感觉C++11确实强大了很多,而且从语言本身上可以看到很多其他语言的影子,比如C#、Jave, 甚至脚本语言,效率和应用场合也多了很多,难怪要这么多年才出炉,慢工出细活啊。
1 效率和性能上说:
初始化的方式变化感觉挺大的。移动构造和继承构造,右值引用,完美转发,花括号初始化,差不多这几个特性都优化了分配和构造的过程。以前老觉得copy ctor传值搞出个临时变量很烦躁,分析来分析去,现在省了不少事情。
2 类型推导机制的出现
这有点像脚本语言的赶脚。类型判别应该是OO的基石了,现在这些工作全部从AP放到了compiler,确实算是很大的进步。auto和decltype分别有对应的应用场合,而且都是编译时就能决定了(如果运行时决定会怎样。。)。
3 硬件和并行
硬件中可能有并行操作,但是并行不一定只用于硬件。以前的原子操作都用汇编来玩,现在算是升级了。memory_order就是防止各种读写操作的乱序,应该可以这么理解。不过感觉对于并行的提供从语言级别还是有点细粒度,控制基本都要开发人员来参与。并行技术等有空刷一遍再考虑吧。
4 函数式编程的加入
lambda在其他语言里都有了java C#。C++加入也是在所难免。很奇怪为什么一个语言要实现这么多不同的编程范式。。以前不是说有面向方面的编程么?不知道属于不属于范式中的一种。lambda写的代码很简洁也很漂亮,就是要注意是不是const。毕竟lambda是闭包类(为什么要设计成闭包类??)
5 泛型的扩展
模板类终于越来越强大了。看STL的时候就很疑惑,bind2nd这样的adapter为什么就只能支持两个参数。终于变成可变长的了。递归式的写法也更加的多了,只是记得那三个点放在什么标示符的后面。说到递归,突然想到constexpr,这样的template meta program还是蛮有意思的。以后写个template的总结再说了。
还有一些其他的特性,比如POD,unicode, attribute之类的,感觉也和其他的语言差不多,或者从标准库里面的一些内容作为了C++11的新增内容。基本都是基于效率和性能,便捷性的考虑的吧。
有个问题一直很奇怪,为什么C++不能提供反射呢?C#有.net平台,Java有jvm,C++就只有编译器的支持了,估计编译器那帮人不想惹这么多事情吧。。估计觉得typeid已经够了。。
总的来说,C++11看起来非常的好用,写出的代码应该也是很简洁的。有空多写写~~ VS2010已经开始支持了的。