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