为什么互换运营商提案被击落?

时间:2015-01-02 21:01:28

标签: c++ swap language-design

Proposal

我刚刚读过这篇文章,这听起来像是一个不可思议的想法。但是,显然,它还没有进入C ++ 14,它似乎甚至没有进入C ++ 17。是什么原因?

1 个答案:

答案 0 :(得分:14)

对于背景,您链接到的论文建议在语言中添加operator:=:以完成今天的操作

using std::swap;
swap(a, b);

相反,你会写,

a :=: b;

这由EWG issue 54跟踪并被拒绝,因为不是缺陷因为使用对swap的无限制调用的技术将会持续存在,尽管有新的运算符,因为没有它,所有用户定义的swap函数将变得无用。此外,添加运算符并不需要依赖ADL来查找特定于类型的swap实现(如果存在)。

从上面的链接引用Bjarne:

  

但由于向后兼容性,swap()并未消失,所以现在我们将swap()operator:=:。 “如果我们有时间机器,可能是个好主意”。引入一个新的运营商,它必须是真正的核心和有用的。如果它让我们摆脱了交换问题,它可能已经足够好了,但事实并非如此。库不会停止调用swap,如果他们这样做,那么人们编写的所有专用交换函数都不会被调用。问题是真实存在的,但它所带来的好处(即它实际解决的问题)并未得到充分解释。 swap:=:很可能会无限期地共存,并且所有交换问题都会持续存在。

     

普遍认为这是一个真正的问题,但不清楚为什么这会解决它们。我们不会继续这样做。

     

没有建议继续前进,被认为是NAD。