首页 > 解决方案 > 重载的 ++ 运算符仅适用于左侧(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;
}

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

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

标签: c++enumsoperator-overloadingrvalue

解决方案


Color& operator++(Color& source)用于预增量,

你需要

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


推荐阅读