有谁知道为什么这段代码无法编译
int main() {
int i = 7;
int j = ++i++; // error: lvalue required as increment operand
}
这段代码可以完美编译吗?
int main() {
Int i{7};
Int j = ++i++; // OK!
}
类
Int
定义如下:
struct Int {
int i;
Int(int i = 0) : i{i} {}
Int& operator++() {++i; return *this;}
Int operator++(int) {Int t{*this}; ++i; return t;}
};
当我编译第一个代码片段时,它失败并出现错误“需要左值作为增量操作数”。另一个编译并按预期工作。
这是因为成员默认使用右值。您可以使用成员函数的 ref 限定符选择加入新规则:
struct Int {
int i;
Int(int i = 0) : i{i} {}
Int& operator++() & {++i; return *this;}
Int operator++(int) const& {Int t{*this}; ++i; return t;}
};