重载 ++ 运算符仅适用于左侧 (C++)

Overloaded ++ operator only works from left side (C++)

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

我重载了 ++ 运算符,但它只能在左侧工作。 背后的原因是什么?

是和我重载的方式有关还是和左值-右值的概念有关?

Color& operator++(Color& source)为预增,

你需要

Color operator++(Color& source, int) 用于 post 增量。