什么是现代C ++?

时间:2010-09-07 17:50:06

标签: c++

我有时会阅读有关C ++为何好或坏的讨论,有时其中一个论点引用了今天的现代C ++与旧的C ++有很大不同。我想知道到底有什么区别?什么是“现代”C ++的例子,以及这个“旧”C ++的例子(最好做同样的事情)是什么?

5 个答案:

答案 0 :(得分:26)

广泛使用标准库和STL,例外和模板 - 而不仅仅是带有类的C

答案 1 :(得分:24)

“现代”C ++不怕使用以下任何或全部:

  • RAII
  • 标准库容器和算法
  • 模板
  • 元编程
  • 例外
  • 升压

“旧”C ++由于缺乏编译器支持或运行时性能而倾向于避免这些事情。相反,你会发现......

  • 很多newdelete
  • 滚动您自己的链接列表和其他数据结构
  • 返回代码作为错误处理机制
  • 数百万不是std::string
  • 的自定义字符串类之一

正如所有这些与那些论点一样,这两种方法都有其优点。现代C ++不是普遍更好。例如,嵌入式环境通常需要大多数人不需要的额外限制,因此您会看到许多旧式代码。总的来说,我认为你会发现大多数现代功能都值得定期使用。摩尔定律和编译器的改进已经解决了避免新问题的大多数原因。

答案 2 :(得分:11)

一个非常明显的区别是,在“旧式”C ++中,您将看到许多使用new手动创建并使用delete销毁的对象。在现代C ++中,只要有可能,就会在堆栈上创建一个对象,或者至少包含在某种智能指针中。

另一个不同之处在于,旧式C ++更多地关注OOP,而现代C ++则使用各种编程风格:过程式,模块式,对象式和通用式。自由函数在现代C ++中被认为是一件好事,而它们将被推入旧式C ++中的某些类中。

其他明显的差异包括使用变得成熟且足够稳定以在生产代码中使用的构造和库:模板,异常,命名空间,STL等。

答案 3 :(得分:6)

C ++中有很多东西被认为是现代

首先,我认为,模板是非凡的出现。不仅是STL本身,而且模板的“常规”使用也导致了模板元编程的发展。请注意,例如,即将出现的标准版本中存在enable_if

这是我认为C ++程序员寻求通过构造强制执行正确性的一种运动中最显着的特征:

  • 更喜欢编译器错误和运行时错误>模板/类型安全而不是省略号/ void*
  • 使用范围限制资源管理(又名RAII,但更明确一点)

这项高质量的研究也导致了普遍使用:

  • STL(已经过彻底测试的算法和数据结构,即使STL在设计上很不安全)
  • Boost库(由专业程序员审核,准无错误,高度便携)

回顾这些库还表明,C ++程序员不再具有对这些OO语言的自卑感:现在从这个复杂的语言中解脱出来,我们毫不犹豫地混合各种范例(OO,泛型,程序)来实现我们的目标。 / p>

总而言之,我认为Modern C ++更像是一种心态。我们(C ++程序员)试图摆脱长期困扰我们的可怕的未定义的行为,并尝试释放我们的用户(通过定义不允许它的接口)。我们也接受其他人来过的事实,重用现有的图书馆并不是软弱的表现。

答案 4 :(得分:3)

Wikipedia page on the upcoming C++ standard对于阅读较新的C ++ 并不是一个糟糕的开始。