在 C++ 中增加右值

问题描述 投票:0回答:1

有谁知道为什么这段代码无法编译

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;}
};

当我编译第一个代码片段时,它失败并出现错误“需要左值作为增量操作数”。另一个编译并按预期工作。

c++ rvalue lvalue post-increment pre-increment
1个回答
0
投票

这是因为成员默认使用右值。您可以使用成员函数的 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;}
};
© www.soinside.com 2019 - 2024. All rights reserved.