定义(重载)自定义C ++运算符

时间:2019-06-01 22:22:55

标签: c++

我正在学习C ++,我想知道是否可能有像->=.=这样的运算符。这种运算符的工作方式类似于算术运算符(+=等),但是它将检查指向对象的两个指针是否属于同一类型。现在我知道在C ++中可以重载运算符,但是显然我追求的运算符在C ++中不存在。 我确实尝试过这样的事情:

class Node {
      Node* ptr;
      Node* operator->=(Node * obj);
};

但是,甚至没有此类声明会编译。 然后,我尝试建立一个像这样的#define ~ ->=宏,在该宏中,我希望IDE使我重载{{1} },然后预处理器会将所有~->=交换。显然这还行不通,宏存在问题,我用尽了所有想法。

据我所知,C ++是一种非常丰富且灵活的语言,我很高兴知道是否可以实现我想要的运算符。

2 个答案:

答案 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