后增量的返回值

时间:2017-08-31 20:46:26

标签: c++ c++14

我已经看到了关于适当声明后增量运算符的一些答案

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 ++”推荐的相同结果的正确方法是什么?

1 个答案:

答案 0 :(得分:4)

你可以禁止rvalue的后期增量:

T operator++(int) && = delete;

您必须使用&限定原始重载:

T operator++(int) & { /*...*/ }.