代码之家  ›  专栏  ›  技术社区  ›  Gian Paolo Ghilardi

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

  •  31
  • Gian Paolo Ghilardi  · 技术社区  · 17 年前

    最近我开始读(只是一点)这本书 current draft 对于未来的C++11标准。

    不管怎样,和一些朋友,长时间的C++开发者讨论这个草案,有些担心出现了。因此,我请你们(回答他们):

    这个更新是巨大的,对于单个标准更新来说可能太大了。对于编译器供应商(即使他们中的大多数已经开始实现某些功能)以及最终用户来说,这都是巨大的挑战。

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

    • 我们可以认为这是一个全新的语言更新后?
    • 您是否计划切换到新标准或跟上“旧”标准?

    2) 语言知识

    • 教这门语言会更难吗?
    • 有些功能虽然非常棒,但对我来说似乎有点太“学术化”(我指的是定义)。我错了吗?
    11 回复  |  直到 14 年前
        1
  •  18
  •   Jeff Linahan nfries    15 年前

    简而言之,不,我们不能认为这是一种新语言。这是相同的语言,新的功能。但是,如果您使用的是支持0x标准的编译器,那么它们现在将成为标准包含,而不是通过使用Boost libs来固定。

    在使用支持新标准的编译器时使用新标准。然而,如果正在开发的软件存在某些限制,人们将不得不学习和使用新标准,但这是任何软件努力的限制。我认为0x标准带来的新特性

    至于我是否会“ 切换到新标准 “,如果这意味着我将学习新标准,并在适用的地方使用它,并在它提高我的生产力的地方使用它,那么是的,我当然计划这样做。” 限度

    掌握一门语言是一个长期的目标,不可能一蹴而就。认为一个人能熟练掌握C++复杂的东西是愚蠢的。它需要实践、经验和调试代码才能真正实现某些功能。学术上的学习是一回事,但运用这些知识是一个完全不同的怪物。我认为,如果一个人已经掌握了C++语言,新概念不会带来太多的负担,但新来的人可能有优势,因为他们不会费心去学习一些过时的做事方法。

        2
  •  15
  •   Richard Corden    15 年前

    1) 语言本身

    就我所知,两者之间确实没有突破性的变化 C++'03和C++'0x。我在这里唯一能想到的就是使用 auto 意思是我不认为这是个问题。

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

    帮助更高级用户的模板等。

    每天都没有使用(甚至听说过)STL的C++开发者。

    正在进行投票的更新帖子:

    碰巧,“概念”被删除了C++ 0x,并且将再次被用于C++ 1x。最后有 一些 汽车 这可能会破坏你的代码,但在实践中,它们可能非常罕见。主要差异见本报告附录C.2 FDIS (pdf) .

        3
  •  12
  •   anon anon    17 年前

    对我来说,最重要的一点是:

    想象:

    1. 无任何开销的智能指针:

      • 无引用计数操作
    2. 智能指针,可以 感动的

    这给了你什么? 异常安全、廉价(指针..)容器,无需任何成本

    1. 你可以使用指针
    2. 它将是安全的(没有内存泄漏)
    3. 您将能够将它们存储在容器中,它们将能够用它们进行“大规模”移动(类似于memcpy)。
    4. 它将是异常安全的

    1. 实际上,当您使用copy()移动对象组时,每个对象实例都有构造函数和析构函数调用。复制1000个1kb大小的对象时,将至少有一个memcpy()和2000个函数调用。
    2. 但指针是:危险的,等等。实际的智能指针不会帮助你,它们会解决其他问题。
    3. 对我来说,这真的很重要。

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

        4
  •  9
  •   paxdiablo    17 年前

    你的朋友部分是对的,但大部分是错的:这是错误的 具有额外功能的语言。

    好的是,你不必掌握所有的新功能。标准机构的主要任务之一是不破坏现有代码,这样您就可以继续,愉快地用您的旧风格编码(尽管我做“C++”应用程序,但我仍然主要是一名C程序员:-)。

    只有当你想看一看新功能时,你才需要专注于这些变化。如果需要的话,这是一个可以持续多年的过程。

        5
  •  8
  •   James Hopkin    17 年前

    在某些方面,C++0x应该是 要教/学当前C++以外的语言,请执行以下操作:

    • 在容器中循环-新的 for 语法比语法简单得多 for_each
    • 初始化容器:我们将能够使用与数组相同的语法初始化序列
    • 内存管理:过时了 auto_ptr unique_ptr shared_ptr

        6
  •  7
  •   Steve Jessop    17 年前

    所以我不希望很快就能摆脱C++03。

        7
  •  7
  •   Daniel Earwicker    17 年前

    你说得有道理,但事实一直如此。有很多C++代码,仍然没有纳入“98标准”,只是因为一些编码器固有的保守。我们中的一些人还记得战争前的黑暗时期 std:: 名称空间(事实上,在名称空间之前),当每个人都编写自己的字符串类时,指针总是赤裸裸地四处走动。我们之所以谈到“现代C++风格”是因为区别于早期的风格,因为有些人仍然需要保持或更新代码。

    任何语言都必须进化才能生存,任何进化的语言都会有一个分裂的用户群,这仅仅是因为人们对在将新的语言特性应用到自己的工作中估计机会成本的态度不同。

    年轻人:我刚刚发现了这些叫做lambdas的东西!我正在寻找许多方法来使用它们,使我们的代码更具表现力!听着,我重写了你的旧课,不是更整洁了吗?

    老头子:我以前的福课没什么问题。你只是在寻找不必要地使用“酷”新功能的借口。你为什么老是把我的生活弄得这么复杂?为什么我要不断学习新东西?我们需要另一场战争,这就是我们需要的。

    年轻人:你太固执了,老天,我们现在不应该用C++了。如果由我决定的话-

    std::transform 还有兰巴斯,我不能用 goto

        8
  •  5
  •   Mark Ingram    17 年前

        9
  •  4
  •   PTBNL    11 年前

    几个月前我听说 Bjarne Stroustrup 做一个题为 C++ 50年 . 诚然,我不是一个C++程序员,但在我看来,他当然不认为0x是一种新语言!

        10
  •  3
  •   Stack Overflow is garbage    17 年前

    关于学习语言,请记住,语言有很多新特性 更容易的 学习和使用。大多数增加复杂性的功能只针对库开发人员。他们可以使用这些新功能来创建更好、更高效、更易于使用的库,这样您就可以在不了解这些功能的情况下使用这些库。其中一些更改实际上简化和概括了现有的功能,使它们

    不仅仅是几个语言设计师坐下来,集思广益地讨论他们想尝试的新特性。

        11
  •  3
  •   user21714    17 年前