首页 > 解决方案 > 在 C(也是 C++)中,'&' 运算符如何同时用作地址运算符和位运算符?由于 C 不支持运算符重载

问题描述

运算符 '&' 可用于以下两种 int a; scanf("%d",&a); 方式printf("%d",1&2)。但不同的行为(第一次作为地址运算符,第二次作为按位运算符)。我知道 C 中没有运算符重载。那么它是如何工作的?还为 c++ 突出显示。

标签: c++coperator-overloadingbitwise-operatorsaddress-operator

解决方案


我知道 C 中没有运算符重载。

这是不正确的。a + b如果ab是整数,则执行整数加法;ab是浮点数的浮点加法; 如果ab是指针,则执行指针运算。

C 语言中内置了运算符重载。它不支持程序定义的自定义运算符重载。

&作为获取地址和执行按位与的运算符的情况下,由语言语法来区分。获取地址的&for 只能出现在语法中的强制转换表达式上。&for 位 AND 只能出现在AND表达式之后和等式表达式之前。这些“标记”(cast-expressionAND-expressionequal-expression) 你可能不熟悉,但它们是在 C 语言的语法中正式定义的,并且当编译器解析源代码时,它会识别表达式的结构并将源代码与语法的标记相匹配。这对于 C++ 也是如此,除了一个小的技术差异:在 C++ 中,其中一个标记是and-expression而不是AND-expression

语法的定义是这样的,对这些标记的识别总是唯一地区分&操作符是如何被使用的。


推荐阅读