【发布时间】:2017-04-23 00:30:58
【问题描述】:
我学到了: 用户定义的后缀自增运算符应该返回一个 const 对象以表现得像一个基本的算术类型:
int i = 0;
i++ = 42; // error, i++ is pr-value
++i = 42; // ok, ++i is l-value
所以对于类 Widget 它应该被声明为
const Widget operator++(int);
...
Widget w1, w2;
w1++ = w2; // error, fine, same as i++ = 42
没有 const,它会编译。但是有了这个就不可能了 打电话给
void f(Widget&&);
f(w1++); // error, invalid initialization of Widget&& from expression const Widget
有什么遗憾,因为 w1++ 是一个 r-value 表达式,它的 constness 没有影响,因为它是一个临时的,不是吗?
现在,应该如何声明 operator++(int)? 感谢您的建议。
【问题讨论】:
-
这就是这些运算符的声明方式en.cppreference.com/w/cpp/language/operator_incdec
标签: c++11 operator-overloading rvalue-reference