哪个C++ 0x功能影响最大?

dic*_*oce 18 c++ c++11

几年后C++开发的日常工作会是什么样的?什么C++ 0x功能最能改变C++开发?

我应该以什么顺序集中学习这些新功能?

Cub*_*bbi 37

我个人认为移动语义(和一般的rvalue引用)是最重要的变化,与线程/锁/原子相提并论.其他一切或多或少都是简化语法或普通第三方解决方案的标准化 - 我们可以在需要lambdas时编写仿函数,并且我们有许多正则表达式库.即使缺乏原子操作,也有一些解决方案,但是没有移动构造函数/移动赋值运算符.

能够移动物体会改变我对语言的整体看法.即使我们已经使用了RVO和交换临时技巧来模仿其中的一部分,但很难想象当这是日常生活的一部分时,生活会如何变化.它不仅仅是ofstream("log.txt") << "Hi!";,或者更快的STL算法,它是在函数之间传递数据的全新方式.

  • 并且新一代程序员不知道他们/他人正在做什么以及为什么它不起作用. (7认同)
  • +1 - 右值参考允许一系列以前不可能的重要构造和方法. (6认同)
  • `unique_ptr`也非常好 - 移动语义指针所有权. (4认同)

Ale*_*ler 26

汽车,因为人们会过度使用它.

  • *正好*当我需要使用迭代器声明循环时我正在寻找的东西..啊......每次我不再需要经常输入`std :: vector <std :: basic_string <TCHAR >>> :: const_iterator`想要循环遍历字符串向量. (14认同)
  • @Idan K:问题是需要输入每个和每个要迭代的STL容器.编写通用代码来处理这种类型是很乏味的.`auto`关键字将删除所有这些. (6认同)
  • "过度使用"......好吧,我不知道.我当然打算广泛使用它*.但是,不知道那是"过度"使用它. (6认同)
  • @paer绝对,我更喜欢`auto x =*it` over`typename std :: iterator_traits <Iter> :: value_type x =*it` anyday. (3认同)
  • @rlbond:我当前的代码不仅仅是`typedef`行写的****只用于循环迭代,**没有**其他.我只是为了生病的幽默而考虑使用宏`#define fordef typedef`.并且不要忘记由FredOverflow正确评论的`typename`.由于这些原因(以及元节目的原因,但主要是这些原因),我欢迎添加`auto`关键字. (2认同)
  • `auto`似乎也可以让代码变得更容易.在..想要从`map`更改为`hash_map`?如果您的迭代器都是自动的,那么它应该是一行更改. (2认同)

Dar*_*rio 25

Lambdas,因为他们最终引入了合理的方法来利用函数式编程的好处.

  • 而且因为他们展示了将时尚特征融入30年语言的悲惨结果. (9认同)
  • <讽刺>将时髦的功能融入80年代的语言给了我们Haskell和F#</ irony> (9认同)
  • @ima:所以你说的是因为语法略显古怪(通过允许你选择是按值或参考来选择来增加表现力),我们都注定了,C++向后迈出了一大步,世界正在走向世界结束?不能说我同意.我没有看到"带有lambda和非理想语法的C++"可能比"没有lambda的C++更糟糕",但是对于语言中的其他所有功能都已经有了非理想的语法"严重,抱怨语法在讨论C++?重点是什么?C++并不是一个语法清晰度的例子 (9认同)
  • 也许它只是展示了这次讨论的严肃性.不可否认,C++ 0x的lambda语法很奇怪 - 就像Python,Lua,VB.NET一样 - 但这并没有受到质疑.我们不是在谈论它们的引入动机或编程语言演化的原理(大多数/所有(现代)语言都是主题),而是它们对未来C++编程的用处.它们**很有用,主要是因为它们最终为我们提供了C++性质的功能(看看STL的功能是如何构建的)但是无法充分复制. (6认同)
  • 将C++从"持久价值"类别转换为"尝试但无法跟上" (3认同)

fre*_*low 21

基于范围的for循环.

for (int x: numbers) std::cout << x << " ";
Run Code Online (Sandbox Code Playgroud)

好极了!


Bil*_*eal 18

Unicode支持.没有更多的鹅卵石和黑客可以正确处理unicode字符 - 现在整个unicode标准本身都支持该语言.


yes*_*aaj 7

auto,lambdas和智能指针.