c++ - 在 C(也是 C++)中,'&' 运算符如何同时用作地址运算符和位运算符?由于 C 不支持运算符重载
问题描述
运算符 '&' 可用于以下两种 int a; scanf("%d",&a);
方式printf("%d",1&2)
。但不同的行为(第一次作为地址运算符,第二次作为按位运算符)。我知道 C 中没有运算符重载。那么它是如何工作的?还为 c++ 突出显示。
解决方案
我知道 C 中没有运算符重载。
这是不正确的。a + b
如果a
和b
是整数,则执行整数加法;a
和b
是浮点数的浮点加法; 如果a
或b
是指针,则执行指针运算。
C 语言中内置了运算符重载。它不支持程序定义的自定义运算符重载。
在&
作为获取地址和执行按位与的运算符的情况下,由语言语法来区分。获取地址的&
for 只能出现在语法中的强制转换表达式上。&
for 位 AND 只能出现在AND表达式之后和等式表达式之前。这些“标记”(cast-expression、AND-expression和equal-expression) 你可能不熟悉,但它们是在 C 语言的语法中正式定义的,并且当编译器解析源代码时,它会识别表达式的结构并将源代码与语法的标记相匹配。这对于 C++ 也是如此,除了一个小的技术差异:在 C++ 中,其中一个标记是and-expression而不是AND-expression。
语法的定义是这样的,对这些标记的识别总是唯一地区分&
操作符是如何被使用的。