我正在学习C ++,我想知道是否可能有像->=
或.=
这样的运算符。这种运算符的工作方式类似于算术运算符(+=
等),但是它将检查指向对象的两个指针是否属于同一类型。现在我知道在C ++中可以重载运算符,但是显然我追求的运算符在C ++中不存在。
我确实尝试过这样的事情:
class Node {
Node* ptr;
Node* operator->=(Node * obj);
};
但是,甚至没有此类声明会编译。
然后,我尝试建立一个像这样的#define ~ ->=
宏,在该宏中,我希望IDE使我重载{{1} },然后预处理器会将所有~
与->=
交换。显然这还行不通,宏存在问题,我用尽了所有想法。
据我所知,C ++是一种非常丰富且灵活的语言,我很高兴知道是否可以实现我想要的运算符。
答案 0 :(得分:1)
不可能在C ++中定义新的运算符,只能通过重载来更改现有运算符的操作。
宏是一个非常糟糕的主意,并且会立即失败,因为宏名称只能由字母数字字符和_
组成。
答案 1 :(得分:0)
不幸的是,C ++仅提供了一组有限的运算符来进行重载,并且它们只允许一定数量的参数。参见this。
#define ~ ->=
预处理器命令不起作用,因为它以错误的方向替换,而且更重要的是,它是无效的宏名称,因为它不仅包含字母数字字符(如HolyBlackCat所指出)。您可以使用其他有效名称,尽管我强烈建议您这样做。
//Raw.cpp
#define MY_OPERATOR ~
void operatorMY_OPERATOR(const Node &n);
//Preprocessed.cpp
void operator~(const Node &n); // understood by compiler