大二时候学过c++,但是那只是为了考试在学习,大作业也就写了一个读写者线程同步的模拟,连一个完整的类都没有写过,所以我必须承认对c++了解的很少。
对于C++ 11这一新标准,我首先阅读了来自前C++标准委员会的 Danny Kalev 的 The Biggest Changes in C++11 (and Why You Should Care)的一个中文翻译(赖勇浩),在文中我阅读到了C++ 11 引入的新特性
http://blog.csdn.net/gzlaiyonghao/article/details/6564162
1.Lambda 表达式
2.自动类型推导和 decltype
3.统一的初始化语法
4.deleted 函数和 defaulted 函数
5.nullptr空指针常量
6.委托构造函数
7.右值引用
8.C++11 的标准库
那么我不由思考为什么要引入这些变化?
在另一篇博文 C++11 中值得关注的几大变化(详解)
我找到了一些答案
比如Lambda表达式的引入
C++引入Lambda的最主要原因就是1)可以定义匿名函数,2)编译器会把其转成函数对象。相信你会和我一样,会疑问为什么以前STL中的ptr_fun()这个函数对象不能用?(ptr_fun()就是把一个自然函数转成函数对象的)。原因是,ptr_fun() 的局限是其接收的自然函数只能有1或2个参数。
那么,除了方便外,为什么一定要使用Lambda呢?它比传统的函数或是函数对象有什么好处呢?我个人所理解的是,这种函数之年以叫“闭包”,就是因为其限制了别人的访问,更私有。也可以认为他是一次性的方法。Lambda表达式应该是简洁的,极私有的,为了更易的代码和更方便的编程。
其他的特性就不在此处细说
那么哪些特性是比较实用的呢
在另一篇博文中由 伯乐在线 - 治不好你我就不是兽医 翻译自 Marius Bancila的 《C++开发者都应该使用的10个C++11特性》 http://blog.jobbole.com/44015/ 很好的向我们说明了我们应该学会并使用的C++11的新特性。
另外的
我还找了两篇英文的关于C++11的详解
http://www.codeproject.com/Articles/312029/Cplusplus11-A-Glance-part-1-of-n
http://www.codeproject.com/Articles/314415/Cplusplus11-A-Glance-part-2-of-n
这两篇是一个系列的,作者是Lakamraju Raghuram。
篇幅比较长,所以作者对更多的C++11新特性进行了解读。
如果你想了解更多,可以访问http://www.open-std.org/jtc1/sc22/wg21/docs/papers/
那里有几乎全部C + +标准委员会的文件,可供你的参考
Stroustrup先生关于C++11的FAQ http://www.stroustrup.com/C++11FAQ.html
我的问题
1.支持C++11新特性的编译器是否还能编译以前的c++工程,比如我电脑中使用vc11还能编译以前的c++代码吗?
2.auto自动类型推导是否会导致一些错误,比如
auto x = 1;
C++11 应该是认为x为int型,实际上用户是想x为double
3.如何理解 rvalues, lvalues, xvalues, glvalues, prvalues
C++03,表达式只是 rvalue 或 lvalue.
4.Stroustrup为什么讨厌宏定义(http://www.stroustrup.com/C++11FAQ.html#bad-features)
nullptr空指针产生原因是NULL只是一个宏定义,而不是关键字。但是宏还是有许多好处啊。为什么感觉Stroustrup是希望C++完全没有宏。
5.C++的入门门槛好高啊,看C++ prime 看了好久都没看完。那更新了C++11的新特性以后 C++ prime这类书不是就更厚了,更难学习了。我该如何学习C++呢?
以上就是我的问题
再此感谢大家阅读我的博文
我对C++认识浅薄,如有错误,还请您指出。若有些问题过于简单或者可笑,也请您匡正