你最喜欢的 C++0x 特性是啥? [关闭]
Posted
技术标签:
【中文标题】你最喜欢的 C++0x 特性是啥? [关闭]【英文标题】:What's your favorite C++0x feature? [closed]你最喜欢的 C++0x 特性是什么? [关闭] 【发布时间】:2010-09-13 08:40:49 【问题描述】:我们很多人都知道(还有很多人不知道),C++ 目前正在为国际标准的下一个修订版进行最终起草,预计将在大约 2 年内发布。草稿和论文目前可从committee website 获得。正在添加各种新功能,其中最大的是概念和 lambda。有一个非常全面的Wikipedia article,其中包含许多新功能。 GCC 4.3 及更高版本实现some C++0x features。
就新功能而言,我真的很喜欢类型特征(和适当的概念),但我的明确领导者是可变参数模板。在 0x 之前,长模板列表通常都涉及到 Boost Preprocessor,而且写起来很不爽。这使事情变得更容易,并允许将 C++0x 模板视为使用可变参数模板的完美功能语言。我已经用它们编写了一些非常酷的代码,我迫不及待地想更频繁地使用它们!
那么您最期待的功能是什么?
【问题讨论】:
我认为我最喜欢的 C++0x 特性是它的名字不准确。 【参考方案1】:auto 变量类型推断的关键字
【讨论】:
我梦想着汽车。如果可用,我将在每条语句中使用它。 4 个字写得真好。 Auto 已经在 GCC 4.4 中实现了!而且太棒了。 哇哦!无需再猜测要添加多少星号到类型中; ) 耶,汽车!不再有 "for (vectorLambda 和初始化列表。
此外,使最终将 C++ 带入垃圾收集模型变得更容易的更改看起来很有趣。也许 C++1x 实际上会引入垃圾回收,但 0x/10 只是为可能发生的情况做好准备。
【讨论】:
GC 阻止 RAII。我宁愿拥有智能指针和 RAII 而不是 GC。 哦不,它没有! RAII 在 Lisp、C# 中虽然与 C++ 略有不同,但 C++/CLI 在 GCed 类上具有与 C++ 析构函数相同的析构函数。 C++0x 在您的基础中添加到您的代码中。一定要喜欢 lambdas 和初始化列表。【参考方案3】:我想要右值引用。
所有其他新功能都是我们可以轻松生活的东西(唉功能)。然而,到目前为止,C++ 中缺少右值已导致数百名模板库作者不得不“破解”损坏的右值引用问题。
【讨论】:
我假设你的意思是右值引用,我们已经有了右值【参考方案4】:可变参数模板! (与 r 值引用相结合为我们提供了完美的转发!)
【讨论】:
【参考方案5】:线程和原子。
现在有了多核处理器,标准 C++0x 应该是 C++07。
G.
【讨论】:
除非它不可能。作为一项 ISO 标准,它每 10 年的修订不能超过一次。因此,2008 年 10 月 10 日是最早可以制定新标准的日期。请注意,最后一次会议是在 9 月,希望尽快获得批准。 什么?你从哪里得到这个规则的?委员会计划在 0x 之后对标准进行更频繁(约 5 年的间隔)更新。当然,C++98 和 '03 之间似乎相差不到 10 年。【参考方案6】:Strongly Typed enums 投票给我。帕斯卡只有大约 40 年的时间,所以很高兴看到 C++ 终于赶上来了。
但是,标准的发布实际上是小事一桩。更重要的是,当您想要使用的功能实际上得到真实世界工具链的完全可靠支持时。 There are folk that seem to actually enjoy writing standards-compliant code that fails to compile on any known compiler.祝他们好运。
【讨论】:
将有用的东西放入标准会增加它进入工具链的机会。这是一个开始。【参考方案7】:它必须是一些 Boost 库的合并(shared_ptr 并绑定在列表顶部)
对模板实例化的控制应该最终解决巨大的编译时间问题,并使在大型项目中使用现代模板代码切实可行。
模板类型定义
许多其他小而重要的事情,但它们在生产代码中确实很重要。
【讨论】:
【参考方案8】:为我传递概念。但初始化列表、lambda 和可变参数模板紧随其后。
【讨论】:
可惜委员会决定不在 C++0x 中包含概念 我真的很高兴它不存在。意见:这将是一个混乱的尴尬,甚至 C++ 委员会的一半都没有真正理解。 我认为大多数人都同意概念是个好主意,只是他们无法尽快确定合适的实现。【参考方案9】:我无法在 Null Pointer Type、Tuple Types 或 Regex 之间做出选择。 “Foreach”也在上面。 “智能指针”不言而喻...... :-)
基本上,我真的很期待更新。
我个人认为大量使用空指针类型会捕获很多错误。元组非常适合处理关系数据。很多很酷的东西。
【讨论】:
【参考方案10】:它并不大,但我喜欢真正的 nullptr 的想法。应该是 git-go 中的关键字。
【讨论】:
应该是 nullptr 不应该吧【参考方案11】:为我关闭。
【讨论】:
【参考方案12】:自动关键字
【讨论】:
【参考方案13】:Lambdas和概念
【讨论】:
【参考方案14】:我认为for (auto x : collection)
迭代语法非常酷……它确实将许多循环头的大小减少了 4 倍或更多(迭代器类型通常……冗长)!
这也意味着您不必在循环体中取消引用迭代器(对于传统的迭代器循环,您总是必须使用*i
或i->...
来获取元素的值,但在这里你可以直接使用x
),这在某些情况下会使代码看起来更漂亮。
【讨论】:
【参考方案15】:unicode、多线程、hash_tables、智能指针和正则表达式。
ps:想知道为什么他们不能进行 gr8 代码审查并接受所有的 boost 和 tr1 库到标准中并让每个人的生活更轻松。然后,他们所要做的就是就一个可行的可选垃圾收集模型达成一致。
【讨论】:
在没有语言支持的情况下无法(有效地)完成 lambda/闭包。 我不想对所有供应商强制使用四元数、GIL 或 BGL 之类的东西。代码审查大多是无关紧要的,因为标准只描述了接口契约——这通常没有在 boost 中指定。 Boost 将仅描述其实现。【参考方案16】:尖括号在嵌套模板声明中。
这样我就可以写了
std::vector<std::vector<int>> a;
而不是可怕的
std::vector<std::vector<int> > a;
【讨论】:
【参考方案17】:语法越来越差。
可变参数模板和 lambdas 都不错,但遗憾的是两者的语法都令人反感。
【讨论】:
【参考方案18】:智能指针。不必显式地管理堆分配的对象,这确实让世界变得与众不同。
显然,您仍然需要“知道自己在做什么”,但根据我的经验,它至少将我使用过的软件中与内存相关的错误数量减少了一个数量级。
【讨论】:
我的代码中已经有了智能指针,来自 Boost。我对自己无法完成的更改更感兴趣。 好的。仅供参考,boost 智能指针是 C++0x 智能指针的基础。 shared_ptr 在 TR1 中也是标准化的,所以它实际上在 C++0x 中并不是新的。 unique_ptr 虽然比 auto_ptr 好很多 @Daniel Earwicker:TR1 不是标准。这是一份技术报告,其中包含要包含在 0x 中的内容的建议。见en.wikipedia.org/wiki/C%2B%2B_Technical_Report_1【参考方案19】:我喜欢constexpr
,尤其是结合可变参数模板和用户定义的文字,我们终于可以拥有二进制文字和许多其他好东西。
obj.bitmask |= 00001010B;
【讨论】:
您必须以 _ 开头文字(非 _ 文字保留以供标准将来使用)。真可惜。 你确定吗?我查看了最新版本 (N2378) 并没有看到该信息。 是的。它位于程序要求下的库要求部分。【参考方案20】:decltype :-) 和lambdas
【讨论】:
【参考方案21】:正则表达式!!和并行编程库,虽然我还不知道它们的全部功能。
【讨论】:
【参考方案22】:原始字符串文字!我认为类似 python 的字符串块很棒,但我错了!在 C++0x 中,原始字符串文字对于文本格式化非常有用。标记语言可以直接在您的源代码中编写!
【讨论】:
【参考方案23】:目前我很喜欢我玩过的 C++0x:
nullptr static_assert lambdas shared_ptr 和 weak_ptr unique_ptr decltype 和自动我还没有尝试过<regexp>
...我认为这是一个伟大的想法...但我什至没有花时间看它。
【讨论】:
以上是关于你最喜欢的 C++0x 特性是啥? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
你最喜欢的 MATLAB/Octave 编程技巧是啥? [关闭]
[react] 你最喜欢React的哪一个特性(说一个就好)