【问题标题】:Overloaded ++ operator only works from left side (C++) [duplicate]重载的 ++ 运算符仅适用于左侧(C++)[重复]
【发布时间】: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;
}

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

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

【问题讨论】:

标签: c++ enums operator-overloading rvalue


【解决方案1】:

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

你需要

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

【讨论】:

  • @arda30 • 注意int第二个参数是一个哑参数,仅用于表示operator++是后缀。
  • @molbdnilo:已修复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-30
  • 2018-07-09
  • 1970-01-01
  • 2011-10-27
  • 1970-01-01
  • 2012-12-22
  • 2016-09-26
相关资源
最近更新 更多