您可能听说过,C++ 标准委员会的最后一次 session 投票决定从下一个 C++ 标准中删除概念。当然,这会影响其他功能,并且似乎会再次打开标准。如果是这样,您认为应该删除(或添加)哪些其他功能,为什么?
链接:
Removal of Concepts -- Danny Kalev(关于删除概念的决定)
Simplifying the use of Concepts -- Bjarne Stroustrup(关于现在看来的概念问题)
The Long Pole Gets Longer -- Martin Tasker(关于如果必须修复概念对 C++0x 进度的影响)
The C++0x "Remove Concepts" Decision - Stroustrup 谈 Dobbs 博士的问题
Trip Report: Exit Concepts, Final ISO C++ Draft in ~18 Months - 草本萨特
Concepts Get Voted Off The C++0x Island - Jeremy Siek 捍卫当前的概念规范
What Happened in Frankfurt? - Doug Gregor on C++Next(关于概念的历史和删除)。
最佳答案
Of course, this will affect other features and would seem to throw the standard wide open again.
几乎没有。他们仍然希望尽快完成标准,这是删除概念的主要原因之一。对不相关的更改“敞开大门”只会丢掉他们通过放弃概念而获得的一切。
无论如何.... 在剩余的 C++0x 附加项中,我想不出还有什么要删除的。我同意他们关于概念的决定。 Stroustrup 的论文确实概述了一些严重的问题,当前的概念规范无疑会简化模板错误消息,但这样做会大大降低泛型编程的实用性——我不愿意为此付出代价。
当我第一次阅读那篇论文时,我感到很害怕,因为我认为在对规范进行重大更改的过程中为时已晚。事实证明并非如此,委员会愿意采取戏剧性的行动。
但除此之外,我认为 C++0x 状况良好。其余的新功能看起来都很值得。
当然,我希望删除许多现有功能。主要是 vector<bool>
特化。还有其他一些没有成功的流行特性示例(export 关键字、异常规范),但 vector 特化是其中唯一一个不可忽视的。只要我们不尝试导出模板,关键字是否存在(并且不是由编译器实现)都没有关系,我们可以避免使用异常规范,但是每次我们都需要一个 bool vector ,我们被当前标准中愚蠢的过早优化所困扰。
不幸的是,他们似乎已经放弃了删除它。 (最后我检查了一下,它甚至没有被弃用)。
当然,也可以抛弃很多旧的 C 垃圾,但最近,我发现我真正希望看到的一个变化是......抛弃iostreams 库。扔掉它,并基于泛型编程构建一个新的 STL 风格的 I/O 库。
当前 OOP 风格的 Iostreams 库丑陋、缓慢、过于复杂且不灵活。定义新流涉及太多巫术,涉及的标准流类型太少,灵 active 太低(让我意识到库有多么有限的问题是我需要从字符串中提取 float 。使用 stringstream 很容易做到,但是如果你需要经常这样做,你不想每次都复制输入字符串(就像 stringstream 一样)——在现有迭代器范围上工作的流在哪里?或者甚至是原始数组? )
扔掉 IO 流,开发一个现代替代品,C++ 将得到极大的改进。
也许还可以对字符串类做点什么。它现在的工作方式还不错,但实际上,大量的成员函数是怎么回事?作为自由函数,它们中的大多数会更好地工作,并且更通用。太多的标准库特别依赖于字符串类,原则上它可以与 any 容器甚至迭代器一起使用(std::getline
,我在看你)
关于C++0X 概念消失了。还应该使用哪些其他功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1155389/