C++运算符=重载

C++ operator= overloading

本文关键字:重载 运算符 C++      更新时间:2023-10-16

我有一个结构Token,我正在尝试将运算符=分配给它。我想能够分配给char。我试过了char operator=(const Token& token){ return token.kind; },它抛出了错误,说不是一元运算符,试过char operator=(const char& ch, const Token& token){ return token.kind; }也没用。是的,我只能做char ch { token.kind };,但我想通过运算符来做,以防添加一些逻辑。你能帮我吗?

REPL示例

struct Token {
char kind;
int value;
Token(char kind, int value): kind(kind), value(value){}:
}

不能为char等内置类型重载operator=,以允许将Token分配给charoperator=必须作为成员函数重载。

作为解决方法,您可以添加一个转换函数,该函数允许从Token隐式转换为char。请注意,隐式转换可能会导致潜在的问题,例如,它允许将Token传递给期望char的函数。

struct Token {
char kind;
int value;
Token(char kind, int value): kind(kind), value(value){}
operator char() const { return kind; }
};

BTW:您可以将转换函数设为explicit,以避免隐式转换的问题。然后,在从Tokenchar的赋值中,必须应用显式转换,如c = static_cast<char>(token);