【发布时间】:2021-11-15 11:11:12
【问题描述】:
#include <iostream>
enum class Color { RED, GREEN };
Color& operator++(Color& source)
{
switch (source)
{
case Color::RED: return source = Color::GREEN;
case Color::GREEN: return source = Color::RED;
}
}
int main()
{
Color c1{ 1 };
Color c2 = Color::RED;
++c1; // OK
std::cout << (int)c1 << std::endl;
c2++; // error
std::cout << (int)c2 << std::endl;
return 0;
}
我重载了 ++ 运算符,但它只能从左侧工作。 背后的原因是什么?
这与我重载的方式有关还是与左值右值概念有关?
【问题讨论】:
-
我认为后增量和前增量运算符有不同的重载。见stackoverflow.com/q/15244094/4688321。
标签: c++ enums operator-overloading rvalue