如何解决使 ++o++ 抱怨带有用户定义的前缀和后缀增量运算符的类型
我正在寻找一种方法来防止 ++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。
解决方法
您可能需要 S& operator++() &
和 S operator++(int) &
。您在末尾遗漏了 &
,它使运算符仅适用于左值。
您希望前缀 ++
运算符仅适用于左值。
此语法自 C++11 起有效。
S& operator++() & {
// ^ This & allows only lvalues for *this
++i_;
return *this;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。