我已经看到了关于适当声明后增量运算符的一些答案
T operator++(int);
大多数人选择返回价值。 “Exceptional C ++”建议返回const值以防止将结果用作l值。
Postincrement应返回一个const值 - 在本例中为const Complex。通过不允许更改返回的对象,我们会阻止像
a++++
这样的可疑代码,这些代码不会像天真的用户那样认为它会做什么。“
快速搜索找到了这个响应https://stackoverflow.com/a/6306106/8491726 - 如果我理解正确添加const现在会阻止使用返回值作为移动语义的参数。因此移动操作的引入弃用了1999 Book的建议。
问题是 - 在C ++ 14中获得“Exceptional C ++”推荐的相同结果的正确方法是什么?
答案 0 :(得分:4)
你可以禁止rvalue的后期增量:
T operator++(int) && = delete;
您必须使用&
限定原始重载:
T operator++(int) & { /*...*/ }.