homework-07 C++ 11 能好怎

时间:2023-03-10 08:44:15
homework-07 C++ 11 能好怎

大二时候学过c++,但是那只是为了考试在学习,大作业也就写了一个读写者线程同步的模拟,连一个完整的类都没有写过,所以我必须承认对c++了解的很少。

对于C++ 11这一新标准,我首先阅读了来自前C++标准委员会的 Danny KalevThe Biggest Changes in C++11 (and Why You Should Care)的一个中文翻译(赖勇浩),在文中我阅读到了C++ 11 引入的新特性

http://blog.****.net/gzlaiyonghao/article/details/6564162

1.Lambda 表达式

2.自动类型推导和 decltype

3.统一的初始化语法

4.deleted 函数和 defaulted 函数

5.nullptr空指针常量

6.委托构造函数

7.右值引用

8.C++11 的标准库

那么我不由思考为什么要引入这些变化?

在另一篇博文 C++11 中值得关注的几大变化(详解)

http://coolshell.cn/tag/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++认识浅薄,如有错误,还请您指出。若有些问题过于简单或者可笑,也请您匡正