我正在寻找一种方法来防止++x++
使用用户定义的前缀和后缀增量运算符的类型。
对于内置类型,后缀运算符的结果类型不是左值而是纯右值表达式,编译器抱怨得很好。
我能想到的最简单的事情是为后缀增量运算符返回 const:
struct S {
int i_;
S& operator++() {
++i_;
return *this;
}
S /*const*/ operator++(int) {
S result(*this);
++(*this);
return result;
}
};
int main() {
S s2{0};
++s2++;
}
这种方法有缺陷吗?
编辑:
多亏了答案,我在这里、这里以及当然在cppreference上找到了更多信息。