【问题标题】:How are you using C++11 today? [closed]您今天如何使用 C++11? [关闭]
【发布时间】:2023-11-11 03:45:01
【问题描述】:

这是一个分为两部分的问题,第一部分是最重要的,现在关注:

  • 您是否在关注 C++11 的设计和演进?您关注哪些博客、新闻组、委员会文件和其他资源?
  • 即使您没有使用任何新功能,它们对您当前的选择有何影响?
  • 您现在正在使用哪些新功能,无论是在生产环境中还是在其他方面?

第二部分是后续,关于新标准一旦定稿:

  • 您希望立即使用它吗?除了前面问题中列出的内容之外,您还为 C++11 做哪些准备?
  • 显然,编译器支持必须存在,但仍然需要考虑同事、辅助工具和其他因素。对您的收养影响最大的是什么?

编辑:原来的实在是太有争议了;但是,我仍然对潜在问题感兴趣,所以我试图清理它并希望它可以接受。这似乎比复制要好得多——即使一些答案对争论的语气做出了回应,但它们仍然适用于他们解决问题的范围,而且所有答案都是社区财产,也需要酌情清理。

【问题讨论】:

  • 我看不出咳咳和咳嗽有什么关系。没有人声称编译器支持它们(除了conceptgcc,它部分支持该功能的一些非常早期的草案),也没有人确定它会被包括在内。 auto 完全不同,因为它是由实际编译器最终确定、同意和支持的。
  • 我又一次偶然发现了这个问题,虽然我是关闭它的人之一,但我现在觉得这是一个有效的问题。 (也许是因为编辑或精神改变,谁知道呢。)无论如何,虽然它可能不会发生,但你应该知道我已经投票重新打开它。
  • @GMan:你和其他四个人(包括我自己)显然:)

标签: c++ c++11 standards forward-compatibility


【解决方案1】:

无法猜测有多少人对新的 C++0x 感兴趣,我很确定每个了解 C++ 并使用它的人都会好奇并渴望了解更多关于它的消息。

一旦从 g++ 实现,我就开始使用 C++0x 中的所有新功能。仍然适用于小型非便携式项目。 为什么? - 人们不断告诉我忘记 c++ 并完全切换到脚本语言以获得更快的代码开发并忘记内存管理。但是,我最好的经验和知识是 c++。我知道 RAII 并且每天都使用 Boost 库。现在,新功能让我写得比以前快得多。知道右值在这里,指针(甚至是智能指针)从代码中消失了。带有 lambda 的 STL 算法只是摇滚和初始化列表让我很高兴。自动关键字很生气。

所以,我现在使用 C++0x 的主要原因是开发速度

【讨论】:

  • 我不知道关键字可以表达情感,更不用说愤怒了
  • 英语不是我的母语,在写这个答案时,它是为了表达我对 c++ 的热爱变得更好地满足我的需求。没有愤怒或对抗的意图!
【解决方案2】:

我今天不使用 C++0x,因为它会导致失去代码可移植性。因为今天没有 C++0x 标准。

答案:
原因:代码可移植性

【讨论】:

    【解决方案3】:

    不,因为它没有在我使用的编译器上完全实现。

    当 C++0x 出现,Visual Studio 2010 完全发布,以及“匹配”的 g++ 时,我将尽可能使用 C++0x。这可能是因为我经常启动新项目(我制作游戏)。

    虽然我有一个现有的代码库,但每次我想办法做得更好时,它都会发生变化;改变对我来说不是障碍。利用 C++0x 只是另一个变化。

    您会在更大的代码库中找到不同的意见。有些地方更喜欢代码看起来统一,这意味着参差不齐的 C++0x 不是一个选择:他们要么必须转换整个东西以利用 C++0x,要么不使用它。

    其他地方可能会鼓励使用 C++0x 功能,并在空闲时间尝试修复旧代码以匹配。

    像我这样的其他地方可能会立即想要利用 C++0x 提供的所有功能。

    答案是:视情况而定。

    【讨论】:

    • 您是否在“完全实施”方面投入了大量资金?很少(只有两个 AFAIK)编译器支持 98 的导出,这让您感到困扰吗?
    • 我不确定我是否理解您的第一个问题。关于你的第二个,不是真的。这可能会很好,但是仅标题中的模板也是一种非常简洁的方法。
    • 我认为“第一个问题”只是一个评论,即 C++98 仍未在最流行的编译器中完全实现,0x 可能也不会。
    • 很多编译器不支持 c99,这让我很困扰。
    • @Roger:你是对的。 “完全实现”是指标准:“可以使用语言或库的任何特定功能”,而“使用”是指适用于大多数预期情况。 (没有编译器可以正确处理它all。)这是您想要澄清的吗?
    【解决方案4】:

    不,但我愿意,尤其是对于 lambda 功能。

    【讨论】:

      【解决方案5】:

      没有。

      我所有的应用软件都是用 Java 开发的。我所有的快速和肮脏的代码都是在 Python 中完成的。我所有的低级工作都是用 C 完成的。我通常不使用 C++(因此它对我没有影响)。

      如果我确实使用了 C++,我会像对待 C1x 一样对待 c++0x - 我确保我的代码不会中断,但我不会使用新功能,直到标准完成并尘埃落定。

      至于我是否会在标准批准后立即使用新功能,不会。这个过程将是一个渐进的过程。随着对我当前应用程序的维护推出,我可能添加它,这取决于可能的好处。

      在我考虑使用这些功能之前,即使是我编写的新应用程序也需要新的语言功能。

      【讨论】:

      • 哈哈,谁对这个人投了反对票。至少他对 C++ xD 的使用很谦虚
      • 天哪。对于这个主观和有争议的问题,你到底为什么要对任何人投反对票?
      • baeltazor:与“正常”答案相比,CW 上的否决票更少是关于错误,更多的是关于意见或类似的分歧。原版只是说“不”,这肯定是一些人投票反对的原因。
      【解决方案6】:

      不,我大部分时间仍在使用 VC6 :(,最早要到 2020 年才能使用 C++0x(也许我应该换公司?)

      【讨论】:

      • 这就是我的回答。我不认识任何叫帕特里克的人在工作,所以这意味着更换公司不是一蹴而就的......
      • 我从一家 VC6 商店换了公司:我现在使用 VB6,所以它并不总是朝着正确的方向迈出一步。
      • @jmucchiello,直到最近有人叫 Graham 还在你家工作吗?
      • 将 vC6 称为 c++ 编译器就像说 Afrikanns 只是荷兰语。严重的最糟糕的 C++ 实现看到了曙光。贵公司是否也使用 Visual Source Safe?
      • 当然我们使用视觉源安全,您还会使用什么来确保源安全?
      【解决方案7】:

      我使用了很多 C++0x,尤其是可变参数模板和函数、auto 和 decltype 以及右值引用。

      虽然使用 g++ 4.5 和 Visual Studio 10 可能会有些有趣,但这些功能现在相当稳定,并且在两种编译器上的工作方式相同。

      我现在开始的软件项目可能在一年左右不会发布,到那时我希望这些新的编译器可以作为标准使用。

      【讨论】:

        【解决方案8】:

        是的,当我玩弄我自己的代码时,它并没有自命不凡。

        当我编写一些人会在旧编译器上使用的东西时,不会。

        【讨论】:

          【解决方案9】:

          视情况而定。我正准备在我的硕士论文中使用某些 C++0x 功能(尽管到目前为止,我主要是在等待 VS2010b2 时坚持使用 C++03 编译器)

          不过,我还不会在实际的专业制作工作中使用它。为此,我想等到标准完成,至少在 MSVC 的情况下,等到编译器发布为非 beta 版本。

          【讨论】:

          • 为什么不呢?确切的编译器并不重要,我只需要访问某些 C++0x 功能。 (如果可能的话,我当然也想让它在 GCC 上运行。
          【解决方案10】:

          我每天都在使用 TR1(regex、unordered_map、unordered_set...)和一些将在下一个标准中出现的增强功能,例如(希望)lexical_cast... 每天,而不仅仅是今天 :)

          【讨论】:

            【解决方案11】:

            今年有新工作,所以我心甘情愿地转投 .NET/C# 世界。我对 C++ 的大多数抱怨在 C# 中都不存在。他们做了很多正确的事情(d'oh!我赞美 MS)

            我认为 C++ 已经变成了一个怪物,而当我最后一次看到它时,C++0x 似乎是在扩大这个怪物,而不是把它缩小到真正必要的子集。

            对于一个主观问题,只需我的两分钱;)

            【讨论】:

            • 我喜欢你的最后一句话;它使人们不想对您投反对票。哈哈哈哈哈:P +1
            【解决方案12】:

            了解 C++0x 的功能很有趣,尤其是当我意识到我已经通过 C++ TR1 使用了其中的一些功能时。到目前为止,扩展的for(“foreach”)、static_assert<functional> 的改进是我在 C++0x 程序中使用较多的。

            它还教会了我一些关于代码重用的知识。试图减少我必须更改以适应 C++0x 的代码量,同时尽可能多地保留与 C++-pre-0x 兼容的代码(例如:库的东西)教会了我将一些 C++0x 修复和元素集成到我的 pre-C++0x 工具箱中;特别是扩展 numeric_limits<> 以包含 const_ 成员,添加 nullptr emulation,添加 default_delete 和类似的构造,并使用(显然经常被遗忘,因为我没有找到使用它的代码)[slist|forward_list] .

            我想说今天使用 C++0x 帮助我更好地继续使用 C++-pre-0x今天。我不确定我是否会在短期内实现“完整”C++0x 的飞跃,考虑到 Boost 有助于覆盖那里的一些领域。而且我不打算在很长一段时间内使用 C++ 接触正则表达式或线程。

            【讨论】:

              【解决方案13】:

              我正在使用 static_assert、decltype,有时还使用 r-value 引用

              【讨论】:

                【解决方案14】:

                目前,我只使用 auto 和 decltype,因为我的大部分代码都没有使用任何需要 r-value 引用或类似的东西,而且我现在对 auto 非常满意(节拍声明一个地图向量的迭代器)

                【讨论】:

                  【解决方案15】:

                  unordered_map。当 map 最初被指定时应该很明显,并不是每个人都愿意支付排序其关联容器键的成本,但是,哦,好吧,至少我们终于有了一个完全标准化的 STL 容器。

                  我也在使用线程库和其他东西。哈哈,我是先行者!我没有工作,也不直接与任何人一起工作,所以我基本上可以随心所欲地处理这些事情。 :)

                  【讨论】:

                    最近更新 更多