重载 ++ 运算符仅适用于左侧 (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 增量。
#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 增量。