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

How to change and(&) operator?

众所周知 & 运算符用于变量的引用和返回地址。我想要做的是将运算符语法更改为类似 _ 或 | 的内容(你明白了)。我该怎么做?

默认值:

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

我想做的事情:

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

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

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

即使您确实选择了一个具有正确通风性的运算符来重载,请注意您不能重载内置类型,例如 int.

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

正如 已经回答的那样,您无法轻易替换运算符。

但是,如果您真的无法忍受使用 & 作为寻址运算符,您 可以 使用 std::addressof 函数。它仍然会很奇怪和不合常理,但至少它在语法上是有意义的。

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

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

#include <iostream>
#define _ &


int main()
{
   int a = 5;
   int* p_a = _ a;
   std::cout << *p_a << std::endl;

   return 0;
} 

你必须在这里放一个space。相信我,没有人希望您重新定义标准运算符。