c++ - 重载的 ++ 运算符仅适用于左侧(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)
用于后期增量。
推荐阅读
- python - 如何使用 tqdm 在 python 中添加进度条
- visual-studio-code - 没有 Git 的 Visual Studio Code 中的差异突出显示
- django - 为我的 Django (Elastic Beanstalk) 后端 API 配置 SSL (HTTPS)
- typo3 - TypoScriptFrontendController 必须使用有效的 SiteLanguage 对象或当前请求中的已解析站点作为后备来构造。没有给出
- java - 给字段赋值和在构造函数中初始化字段值的区别
- jestjs - 开玩笑 - 如何断言数组中的所有项目都是对象并包含某些属性?
- kotlin - 如何在 Kotlin 中创建 Guava CacheBuilder?
- wpf - 强制两个 WPF 控件具有相同的宽度,同时保持来自 xaml 的自动调整大小(两个控件的宽度都大于两个)
- javascript - 使用基于嵌套值的数组过滤对象数组以提取特定字段
- android - 我可以添加一个允许通知权限而不是打开应用程序设置的按钮吗?(颤振,iOS/Android)