如何更改and(&)运算符?

时间:2018-07-18 13:19:21

标签: c++ operator-overloading operators

我们知道,

和运算符用于引用和返回变量的地址。我想做的就是将运算符语法更改为_或| (你明白了)。我该怎么办?

默认值:

int *p;
int a;
p = &a;

我想做什么:

int *p;
int a;
p = _a; // or |a

3 个答案:

答案 0 :(得分:6)

您不能更改为_,因为它不是运算符,因此不能重载。

您不能更改为|,因为该运算符的 airity 是二进制的,而指针取消引用*是一元的。

即使您确实选择了具有正确空缺性的运算符进行重载,也请注意,您不能重载内置类型,例如int

最后,如果您想了解运算符重载的最强大功能,请看一下以下项目:http://boost-spirit.com/home/,其中表达式模板与运算符重载一起用于模拟EBNF语法。

答案 1 :(得分:3)

&当应用于两个运算符时为'and',但一元应用于时为'take address'。您不可能混淆它们。

如果您只是好奇,可以这样做

this.props.tasks.map((i) => {return (<Task key={i} _onChange={this._onChange}/>);

您必须在此处放置一个空格。相信我,没有人希望您重新定义标准运算符。

答案 2 :(得分:1)

Bathsheba已经回答,您无法轻松替换那些运算符。

但是,如果您真的不能忍受使用&作为地址运算符,则可以使用std::addressof函数。它仍然会很奇怪而且很独特,但是至少在语法上有意义。