【发布时间】:2021-06-21 15:19:12
【问题描述】:
我正在寻找一种方法来阻止 ++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++;
}
这种方法有缺陷吗?
编辑:
感谢答案,我找到了更多信息here、here,当然还有cppreference。
【问题讨论】:
-
按值返回 const 类通常是有缺陷的 - 它禁止从这些值移动。 (并且在由值返回的非类类型上,常量被完全忽略。)
标签: c++ post-increment prvalue least-astonishment