首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++11:一种新的语言?

C++11:一种新的语言?
EN

Stack Overflow用户
提问于 2009-05-07 12:31:15
回答 10查看 2.6K关注 0票数 31

最近,我开始为未来的现行草案标准阅读(只是一点点)。

有许多新的功能,其中一些已经可以通过Boost Libs获得。当然,我对这个新标准非常满意,我想尽快使用所有的新特性。

不管怎么说,与一些朋友谈论这个草案,长期的C++开发人员,一些担心出现了.所以,我请你(回答):

1)语言本身

这个更新是巨大的,也许对于单个标准更新来说太大了。对于编译器供应商(即使他们中的大多数已经开始实现一些功能)来说,这是巨大的,但对于最终用户来说也是如此。

特别是,我的一个朋友告诉我“这是一种新的语言”。

  • 在这次更新之后,我们能把它看作是一种全新的语言吗?
  • 你打算改用新的标准还是跟上“旧”标准?

2)语言知识

  • 学习曲线将如何受到新标准的影响?
  • 教语言会更难吗?
  • 有些功能虽然很棒,但对我来说似乎有点“学术性”(我指的是定义)。我说错了吗?
  • 掌握所有这些新增加的东西可能是一场噩梦,不是吗?
EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2009-05-07 15:16:21

总之,不,我们不能认为这是一种新的语言。这是同一种语言,新特性。但是,如果使用支持0x标准的编译器,而不是使用Boost库,它们现在将成为标准包含。

在使用支持新标准的编译器时,不必使用新标准。但是,如果正在开发的软件上存在某些约束,则必须学习和使用新标准,但这是对任何软件努力的限制。我认为0x标准带来的新特性将使做某些事情变得更容易,更容易出错,因此了解新特性是什么,以及它们将如何改进其未来工作的设计策略,对人们是有好处的。人们还必须学习它,这样在使用它开发软件时,他们就会了解发生了什么,而不会发出大的嘘声。

至于我会否“改用新标准”,如果这表示我会学习新的标准,并在适用的情况下使用,以及在提高生产力的地方使用,那麽,我当然会改变。但是,如果这意味着我将限制自己只使用0x标准的新特性,那么就不会,因为我的大部分工作涉及在标准之前编写的代码,重新设计所有使用新特性的内容将是一项艰巨的任务。不仅如此,它还可能带来新的but和性能问题,这是我在没有经验的情况下没有意识到的。

学习C++一直是程序员能够进行的更具挑战性的旅程之一。在语言中添加新的特性不会改变学习语法的难度,也不会改变如何有效地使用语法,但方法将发生变化。人们仍将了解指针及其工作方式,但也将了解智能指针及其管理方式。在某些情况下,人们会学到与以前不同的东西。例如,人们仍然需要学习如何初始化事物,但是现在他们将学习统一初始化和初始化列表作为主要的工作方法。在某些情况下,在函数声明中添加新的范围语法或自动返回类型可能更容易理解。我认为,总的来说,C++将变得更容易学习和使用,同时变得更容易教学。

掌握一门语言是一个长期的目标,它不可能在一夜之间完成.认为一个人能很快掌握像C++这样复杂的东西是很愚蠢的。需要实践、经验和调试代码,才能真正投入到其中。学术上的学习是一回事,但投入使用这些知识是一个完全不同的怪物。我认为,如果一个人已经掌握了C++语言,新的概念不会带来太多的负担,但是一个新来的人可能会有一个优势,因为他们不会费心学习一些更过时的做事方法。

票数 18
EN

Stack Overflow用户

发布于 2009-05-07 12:55:26

1)语言本身

据我所知,C++'03和C++'0x之间并没有什么重大变化,这里我唯一能想到的是使用auto作为存储类说明符,但是由于它没有语义意义,所以我不认为这是一个问题。

对于这个标准还有许多其他的学术修正是非常必要的,例如,对成员数据的布局有更好的描述。最后,随着多核/cpu体系结构成为常态,必须修复内存模型。

2)语言知识

我个人认为,对于99.9%的C++开发人员来说,更新的语言将更容易使用。我特别想到的功能,如汽车,兰博达和警察。这些特性确实应该使语言的使用更令人愉快。

在更高级的级别上,您有其他功能,如各种模板等,帮助更高级的用户。

但是这里没有什么新的东西,我仍然对每天有这么多的C++开发人员没有使用(甚至听说) STL感到惊讶。

从个人角度来看,在新标准中,我唯一关心的是概念的特性。由于这是一个如此大的变化,同样的问题发生在模板(即。(完全崩溃的实现)是一个真正的危险。

更新FDIS出站投票:

碰巧的是,“概念”在C++ 0x中被删除,而C++ 1x将再次被使用。最后,除了auto之外,还有一些可能会破坏您的代码的更改,但在实践中它们可能会非常罕见。关键的区别可以在外国直接投资(pdf)的附录C.2中找到。

票数 15
EN

Stack Overflow用户

发布于 2009-05-07 15:19:52

对我来说,最重要的是:

unique_ptr + std::move() !

想象一下:

  1. 没有任何开销的智能指针:
代码语言:javascript
复制
- no reference counting operations
- no additional storage for reference counter variable

  1. 智能指针,可以被移动,即。移动时没有析构函数/构造函数调用

这给了你什么?异常安全,便宜(指针..)集装箱,没有任何费用,。容器将能够只使用memcpy() unique_ptrs,因此不会因为智能指针包装常规指针而导致性能损失!所以,再一次:

  1. 您可以使用指针
  2. 它是安全的(没有内存泄漏)
  3. 它不会让你付出任何代价
  4. 您将能够将它们存储在容器中,并且它们将能够以较低的价格进行“大规模”移动(memcpy样)。
  5. 它是异常安全的

:)

另一种观点是:

  1. 实际上,当您使用copy()移动对象组时,每个对象实例都有构造函数和析构函数调用。当您复制1kb大小的1000个对象时,至少会有一个memcpy()和2000函数调用。
  2. 如果要避免数千次调用,就必须使用指针。
  3. 但是指针是:危险等等。实际的智能指针不会对你有帮助,它们能解决其他问题。
  4. 目前还没有解决办法。您必须不时地支付C++ RAII/指针/valuevars设计的费用。但是使用C++0x,使用unique_ptr可以对对象进行“大规模”移动(是的,实际上是对象,因为指针是智能的),而不需要“大规模”构造函数/析构函数调用,也不需要使用指针!,这对我来说非常重要。

这就像放松RAII的概念(因为使用指针),而不失去RAII的好处。另一个方面:封装在unique_ptr()中的指针将在许多方面运行,类似于java引用对象变量。不同的是,unique_ptr()一次只能存在于一个作用域中。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/834383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档