2012-08-06 156 views
3

我将在一个月内开始学习C++ 11,并想知道C++ 11与C++ 03相比有什么优势?C++ 11与C++ 03相比有什么好处?

+4

http://www.stroustrup.com/C++11FAQ.html阅读。 – ForEveR 2012-08-06 19:48:27

+0

是一个更大更可怕的复杂标准。 http://www-users.cs.york.ac.uk/susan/joke/cpp.htm(抱歉,无法抗拒) – 2012-08-06 19:53:24

+3

“C++ 11如何比C更好”这个问题是毫无意义的。这是比较苹果和熊。 – 2012-08-06 19:57:35

回答

5

如果我不得不钉它归结为两件事情,我会说“右值引用和可变参数模板”是C++ 11比C++ 03最重大的改进。两者都允许你做一些事情,应该一直可能,并增加了巨大的表达力的语言。最后,你可以有适当的unique_ptr和容器与感谢的举动语义右值引用,并直接施工,而不是建设得益于复制到两种构建和谐玩:

template <typename ...Args> 
void construct(void * p, Args &&... args) 
{ 
    ::new (p) T(std::forward<Args>(args)...); 
} 

另一个巨大的改进是一个内存模型纳入该语言允许对并发执行(多线程)进行标准化描述。

有吨的小更新,使语言更具表现力,虽然,并且允许你做的事情你根本无法做以前:

  • 括号初始化,您可以初始化类成员阵列和值构造的自动对象。

  • 初始值设定项列表允许您初始化容器。

  • 一个更好的常量表达式的概念。

  • 更好地指定类和联合的内存布局,以及细致的“平凡”概念,以尽可能优化。

  • lambda表达式和闭包使算法和函数式编程更容易,更可行。

+0

不错的例子Kerrek。 – 2012-08-06 20:10:36

+0

我想补充一下,结合使用函数指针或函子的标准库函数的lambda表达式也是一项巨大的改进。另外:'汽车' – KitsuneYMG 2012-08-06 20:27:56

+0

不应该是'(args)...'而不是'(args ...)'? – fredoverflow 2012-08-06 21:40:45

3

C和C++是完全不同的语言,所以回答问题的这一部分没有意义。对于C++到C++ 11,您只是将越来越多的现代功能添加到语言中,以帮助您编写更好的面向对象代码。

库已经发展一段时间内BOOST和在其他地方,让你使用:

  • 智能指针
  • 正则表达式
  • lambda表达式
  • 自动变量

因此,大多数情况下,你有有更多的库支持你的编码,所以你可以使用更多的“标准”代码和更少的用户代码。这意味着您正在调试以免编码更快。

新增注:许多这些功能都是围绕总体推进良好的编程习惯。例如,智能指针可以帮助您使用RAII(资源分配是初始化),以确保您的动态获取资源在不再被引用时被释放。

使用C++ 11就像获得新的法拉利,当你已经拥有一个。旧的很好,完成工作,但新的更好,并有新的甜蜜功能,​​让你开车更安全,更快,同时有更多的乐趣一路:)

+0

所以基本上我可以调试更少,代码更友好?或者学习曲线不太陡峭。 – 2012-08-06 20:05:39

+0

那么,你是否更信任自己的代码,或者成千上万的优秀开发人员多年来一直在调试的代码? :)另外,使用标准代码更快,曲线更少。你可以谷歌如何做5分钟的正则表达式,编写代码来做一个复杂的正则表达式可能需要你花几天时间去调试。 – 2012-08-06 20:07:57

+0

好点W00te。 – 2012-08-06 20:09:41

2

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的复合文字。

+0

非常好的答案bames。非常感谢你。 – 2012-08-06 21:39:44

相关问题