如何更改 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。相信我,没有人希望您重新定义标准运算符。
众所周知 & 运算符用于变量的引用和返回地址。我想要做的是将运算符语法更改为类似 _ 或 | 的内容(你明白了)。我该怎么做?
默认值:
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。相信我,没有人希望您重新定义标准运算符。