为什么掉期运营商提案被否决了
Why was the swap operator proposal shot down?
提案
我不久前读到这篇文章,这听起来像是一个令人难以置信的想法。但是,很明显,它还没有进入C++14,甚至似乎也没有进入C++17。原因是什么?
作为背景,您链接到的论文建议在语言中添加operator:=:
,以实现以下工作
using std::swap;
swap(a, b);
相反,你会写,
a :=: b;
这由 EWG 问题 54 跟踪并被拒绝,因为尽管有新运算符,但使用非限定调用swap
的技术仍将存在,因为没有它,所有用户定义的swap
函数都将变得无用。此外,添加运算符并不能消除必须依赖 ADL 来查找特定于类型的swap
实现(如果存在)的需要。
引用上面的链接中的Bjarne:
但是
swap()
不会因为向后兼容性而消失,所以现在我们将拥有swap()
和operator:=:
."如果我们有一台时光机,这可能是个好主意"。引入一个新的运营商,它必须真正中心和有帮助。如果它让我们摆脱了交换问题,那可能就足够好了,但事实并非如此。库不会停止调用 swap,如果他们这样做了,那么人们编写的所有专用交换函数都不会被调用。问题是真实的,但它的好处(即它实际会解决什么问题)没有得到充分的解释。swap
和:=:
很可能无限期共存,交换的所有问题都将持续存在。普遍认为这是一个真正的问题,但不清楚为什么这会解决这些问题。我们不会继续这样做。
没有向前推进的建议,考虑NAD。
相关文章:
- 呼叫运营商<<临时
- 两个运营商的一些奇怪的冲突<<
- 如何在 CPP 中访问家长的运营商
- 如何明确调用好友流运营商
- 私有运营商删除会触发 GCC 和 Clang 的编译时错误,但不会在 MSVC 上触发编译时错误
- 使用运营商New分配的数据结构是否有任何副作用
- "Inheriting"移动运营商?
- 朋友ostream&运营商<<无法访问私人会员
- 为什么在下面的代码返回类型中是用于运营商重载的类类型
- 范围的枚举(枚举类)关系运营商
- 为什么“操作员”需要const但不是为“运营商&lt;”
- 对这两个分配运营商之间的不同感到困惑
- 我的班级意外加法运营商
- OpenACC - C++"新"运营商问题
- 为什么我不能使私人运营商成为新的并使用默认实现?
- 分配运营商为什么返回任何开始
- 你为什么要把运营商"新"设为私人运营商
- 为什么 std::basic_ostream 同时有免费和会员运营商<<?
- 为什么掉期运营商提案被否决了
- 他们为什么不添加 iota 的运营商版本?