我们最喜欢的C ++ 0x功能是什么?

时间:2020-03-06 14:45:58  来源:igfitidea点击:

正如我们许多人所知(很多人还不知道),C ++目前正在为国际标准的下一修订版进行最终起草,预计将在大约2年后发布。目前可从委员会网站上获得草稿和论文。各种新功能都被添加,最大的是概念和lambda。 Wikipedia上有一篇非常全面的文章,其中包含许多新功能。 GCC 4.3和更高版本实现了一些C ++ 0x功能。

就新功能而言,我真的很喜欢类型特征(以及适当的概念),但是我绝对的领导者是可变参数模板。直到0x为止,长模板列表通常涉及Boost Preprocessor,并且编写起来非常不愉快。这使事情变得容易得多,并允许使用可变参数模板将C ++ 0x模板视为功能完善的语言。我已经用它们编写了一些非常酷的代码,我迫不及待地想更频繁地使用它们!

那么,我们最期待的功能是什么?

解决方案

可变类型推断的自动关键字

线程和原子。

对于现在的多核处理器,规范C ++ 0x应该是C ++ 07.

G。

Lambda和初始化程序列表。

而且,所做的更改使最终将C ++引入垃圾收集模型变得更加容易,这些更改似乎很有趣。也许C ++ 1x实际上会带来垃圾回收,但是0x / 10只是为可能的事情做准备。

对我关闭。

自动关键字

unicode,多线程,hash_tables,智能指针和正则表达式。

ps:不知道为什么他们不能进行gr8代码审查,并接受所有boost和tr1库纳入标准,并使每个人的生活更轻松。然后,他们所要解决的就是在一个可行的可选垃圾收集模型上达成一致。

我想要参考值。

所有其他新功能都是我们可以轻松生活的东西(alas功能)。但是,到目前为止,C ++中缺少Rvalues已导致成百上千的模板库作者不得不"破解"破碎的Rvalue ref问题。

为我代代相传。但是初始化列表,lambda和可变参数模板紧随其后。

  • 它必须包含一些Boost库(shared_ptr <>并绑定在列表的顶部)
  • 对模板实例化的控制最终应该解决巨大的编译时间问题,并使在大型项目中使用现代模板代码实际上可行。
  • 模板typedefs

许多其他小的但重要的事情,但它们在生产代码中确实很重要。

Lambda和概念

我无法在Null指针类型,元组类型或者正则表达式之间做出选择。 " Foreach"也在那里。 '智能指针'不用说... :-)

基本上,我真的很期待更新。

我个人认为大量使用null指针类型会引起很多错误。元组非常适合处理关系数据。很多很酷的东西。

可变参数模板! (将其与r值引用结合起来可以为我们提供完美的转发!)

语法越来越糟。

可变参数的模板和lambda很不错,尽管不幸的是两者的语法都令人反感。

智能指针。不必显式地管理堆分配的对象,这确实带来了很大的变化。

显然,我们仍然需要"知道自己在做什么",但是以我的经验,它已经减少了与内存相关的错误的数量,至少减少了我使用过的软件的一个数量级。

它不大,但是我喜欢真正的nullptr的想法。应该是git-go中的关键字。

我喜欢constexpr,尤其是与可变参数模板和用户定义的文字结合使用时,我们终于可以拥有二进制文字和许多其他东西了。

obj.bitmask |= 00001010B;

强类型枚举得到我的投票。 Pascal仅仅拥有这些已有40多年了,因此很高兴看到C ++终于赶上了。

但是,该标准的发布实际上不是一件小事。更重要的是,实际使用的工具链实际上完全可靠地支持了我们要使用的功能。有些人似乎实际上很喜欢编写符合标准的代码,但这些代码无法在任何已知的编译器上进行编译。祝他们好运。

正则表达式!和并行编程库,尽管我还不了解它们的全部功能。

原始字符串文字!我以为类似python的字符串块很棒,但是我错了!在C ++ 0x中,原始字符串文字对于文本格式非常有用。标记语言可以直接在源代码中编写!

嵌套模板声明中的尖括号。

这样我就能写

std::vector<std::vector<int>> a;

而不是可怕的

std::vector<std::vector<int> > a;

decltype :-)和lambdas

就目前而言,我非常喜欢我玩过的C ++ 0x:

  • nullptr
  • static_assert
  • Lambdas
  • shared_ptr和weak_ptr
  • unique_ptr
  • 十进制类型和自动

我还没有尝试过<regexp>。。。我认为这是一个很大的主意。。。但是我什至没有花时间去研究它。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

我认为for(auto x:collection)迭代语法非常酷...它实际上将许多循环头的大小减少了4倍或者更多(迭代器类型通常...冗长)!

这也意味着我们不必在循环体内取消对迭代器的引用(对于传统的迭代器循环,我们始终必须使用* i或者i-> ...来获取元素的值) ,但是在这里我们可以只使用x),这在某些情况下使代码看起来更好。