为什么掉期运营商提案被否决了

Why was the swap operator proposal shot down?

本文关键字:运营商 为什么      更新时间:2023-10-16

提案

我不久前读到这篇文章,这听起来像是一个令人难以置信的想法。但是,很明显,它还没有进入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。