gpt4 book ai didi

c++ - 运算符重载枚举类

转载 作者:太空狗 更新时间:2023-10-29 20:21:05 25 4
gpt4 key购买 nike

我正在尝试重载枚举类的 & 运算符,但出现此编译器错误:错误:'operator&=' 不匹配(操作数类型为 'int' 和'数字')。对此有什么想法吗?

#include <iostream>
using namespace std;

enum class Numbers : int
{
zero = 0,
one = 0x01,
two = 0x02
};

inline int operator &(int a, Numbers b)
{
return ((a) & static_cast<int>(b));
}

int main() {
int a=1;
a&=Numbers::one;
cout << a ;
return 0;
}

最佳答案

编译器会准确指出问题所在。您没有重载 &=

尽管有预期的语义,&= 不会自动扩展为 a = a & Numbers::one;

如果你想同时拥有两者,规范的方法通常是根据 op= 来实现 op。所以你原来的函数调整如下:

inline int& operator &=(int& a, Numbers b)
{ // Note the pass by reference
return (a &= static_cast<int>(b));
}

新的使用它:

inline int operator &(int a, Numbers b)
{ // Note the pass by value
return (a &= b);
}

关于c++ - 运算符重载枚举类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46194734/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com