我将在一个月内开始学习C++ 11,并想知道C++ 11与C++ 03相比有什么优势?C++ 11与C++ 03相比有什么好处?
回答
如果我不得不钉它归结为两件事情,我会说“右值引用和可变参数模板”是C++ 11比C++ 03最重大的改进。两者都允许你做一些事情,应该一直可能,并增加了巨大的表达力的语言。最后,你可以有适当的unique_ptr
和容器与感谢的举动语义右值引用,并直接施工,而不是建设得益于复制到两种构建和谐玩:
template <typename ...Args>
void construct(void * p, Args &&... args)
{
::new (p) T(std::forward<Args>(args)...);
}
另一个巨大的改进是一个内存模型纳入该语言允许对并发执行(多线程)进行标准化描述。
有吨的小更新,使语言更具表现力,虽然,并且允许你做的事情你根本无法做以前:
括号初始化,您可以初始化类成员阵列和值构造的自动对象。
初始值设定项列表允许您初始化容器。
一个更好的常量表达式的概念。
更好地指定类和联合的内存布局,以及细致的“平凡”概念,以尽可能优化。
lambda表达式和闭包使算法和函数式编程更容易,更可行。
不错的例子Kerrek。 – 2012-08-06 20:10:36
我想补充一下,结合使用函数指针或函子的标准库函数的lambda表达式也是一项巨大的改进。另外:'汽车' – KitsuneYMG 2012-08-06 20:27:56
不应该是'(args)...'而不是'(args ...)'? – fredoverflow 2012-08-06 21:40:45
C和C++是完全不同的语言,所以回答问题的这一部分没有意义。对于C++到C++ 11,您只是将越来越多的现代功能添加到语言中,以帮助您编写更好的面向对象代码。
库已经发展一段时间内BOOST和在其他地方,让你使用:
- 智能指针
- 正则表达式
- lambda表达式
- 自动变量
- 等
因此,大多数情况下,你有有更多的库支持你的编码,所以你可以使用更多的“标准”代码和更少的用户代码。这意味着您正在调试以免编码更快。
新增注:许多这些功能都是围绕总体推进良好的编程习惯。例如,智能指针可以帮助您使用RAII(资源分配是初始化),以确保您的动态获取资源在不再被引用时被释放。
使用C++ 11就像获得新的法拉利,当你已经拥有一个。旧的很好,完成工作,但新的更好,并有新的甜蜜功能,让你开车更安全,更快,同时有更多的乐趣一路:)
所以基本上我可以调试更少,代码更友好?或者学习曲线不太陡峭。 – 2012-08-06 20:05:39
那么,你是否更信任自己的代码,或者成千上万的优秀开发人员多年来一直在调试的代码? :)另外,使用标准代码更快,曲线更少。你可以谷歌如何做5分钟的正则表达式,编写代码来做一个复杂的正则表达式可能需要你花几天时间去调试。 – 2012-08-06 20:07:57
好点W00te。 – 2012-08-06 20:09:41
C++ 11的目标是改进C++擅长的所有事情;表现力,性能,类型安全性,以及改善事物C++并不是那么棒;一致性和易学性。 C++ 11还增加了对C++ 98第一次标准化后变得更加重要的计算趋势的支持,例如多线程
对于性能C++ 11增加了允许C++ 11代码的右值引用避免使用一些昂贵的副本,而无需阅读或理解有时在C++ 03中使用的解决方法。而且任何新功能仍然遵循“不付出你不使用的东西”的格言,保持C++的性能。
C++ 11增加了很多表现力,包括可变参数模板,通用属性,用户定义文字和默认特殊功能。 C++ 11还可以更容易地表达某些可以用C++ 03完成但不太容易的事情,例如静态断言,编译时表达式和模板类型别名,以及已删除的特殊功能。
对于类型安全,现在有强类型枚举,显式转换运算符,不会执行失去精度的转换的初始化语法,即nullptr关键字。
C++ 11消除了许多限制,使其更加一致和易于学习。一些示例是非静态数据成员的类内初始化,继承/委托构造函数,初始化器列表,右角括号修正,函数模板的默认模板参数,枚举前向声明,不受限制的联合等。还有许多新功能每个'替换'一些旧的功能,这意味着一个新的程序员需要学习起步较少。
最初的问题还要求比较,以C.
至于C++和C,C++ 11带来的是镜像因为原来的C加入到C的特征的许多改进++标准(C + +98)。例如,C++ 11添加了C99的可变参数宏long long
,对扩展整型的要求和__func__
预定义的标识符。 C++ 11现在强制复杂数字的布局,使其与C99中的_Complex数字(推测)布局兼容。可以使用其他功能来代替添加到C的功能,例如C++ 11的统一初始化语法代替C99的复合文字。
非常好的答案bames。非常感谢你。 – 2012-08-06 21:39:44
- 1. C#7本地函数相比lambdas有什么好处?
- 2. C++ 03等效的C++ 11 lambda
- 3. 与OO相比,编写“功能性”JavaScript有什么好处?
- 4. 与jQuery中的分号相比,逗号有什么好处?
- 5. 古典结构与原型结构相比有什么好处?
- 6. SQLite C API中使用sqlite3_data_count()比sqlite3_column_count()有什么好处?
- 7. 大C宏。有什么好处?
- 8. C# - “部分”类有什么好处?
- 9. C#MVC:使用Modelbinders有什么好处?
- 10. “相对+”运算符有什么好处?
- 11. 为什么这个C++代码与C#版本相比较慢
- 12. 与C stdio库相比,C++ iostream必须提供什么?
- 13. 与C#一起使用GhostDocs有什么特别的好处?
- 14. 粘液有什么好处?
- 15. 在C++中std :: initializer_list的好处11
- 16. 使用ObjectReader比ObjectMapper有什么好处?
- 17. WEBVTT(.vtt)比SubReal(.srt)有什么好处?
- 18. String没有做什么? C++ 11
- 19. C++ 11和C++之间的库兼容性03
- 20. 如何编译使用C++ 11库API的C++ 03项目?
- 21. 监视器<T> C++ 11和C++ 03中的类实现?
- 22. 与回流中的逻辑PDF相比,带标签的PDF有什么好处
- 23. 与Java相比,Android C有更好的性能吗?
- 24. 元组有什么好处?
- 25. 与C++ 11混淆?
- 26. Objective-C与Lisp相比有多抽象?
- 27. C++ 11:boost :: make_tuple与std :: make_tuple有什么不同?
- 28. 通过标准C++或C#使用C++/CLI有什么好处吗?
- 29. Flycheck UsePackage与C++ 11
- 30. C++性能,与之相比
http://www.stroustrup.com/C++11FAQ.html阅读。 – ForEveR 2012-08-06 19:48:27
是一个更大更可怕的复杂标准。 http://www-users.cs.york.ac.uk/susan/joke/cpp.htm(抱歉,无法抗拒) – 2012-08-06 19:53:24
“C++ 11如何比C更好”这个问题是毫无意义的。这是比较苹果和熊。 – 2012-08-06 19:57:35