C和C++运算符

✍ dations ◷ 2025-11-27 19:37:50 #Webarchive模板archiveit链接,C语言,C++

所有的C语言运算符都被C++语言支持。C语言不支持运算符重载。

在不重载时,运算符&&||,(逗号运算符),在第一个操作数求值之后有一个顺序点。

大部分C与C++运算符也可用于其它程序设计语言如C#、Java、Perl、PHP等,具有相同的优先级、结合性与语义。

以下是C++编程语言中的所有运算符的优先级和结合性列表。

在本表中,abc代表有效值(来自变量或返回值的逐字常量或数值)、对象名称,或适当的左值。

在C和C++中对运算符的约束,是语言的语法规范因素所指定的(在对应的标准中),而不是优先级列表。这造成了一些微妙的冲突。例如,在C中,条件表达式的语法是:

   邏輯-OR-表達式 ? 表達式 : 條件-表達式

在C++中则是:

   邏輯-or-表達式 ? 表達式 : 賦值-表達式

因此,这个表达式:

   e = a ? b : c = d

两个语言的语法分析结果并不相同。在C中,这个表达式被解析为:

   e = ((a ? b : c) = d)

这是一个错误的语义,因为条件-表达式的结果并不是一个左值。在C++中,则解析为:

   e = (a ? b : (c = d))

这是一个有效的表达式。

比特逻辑运算符的优先级一直受到批评 Archive-It的存档,存档日期2015-02-03。在观念里,&和|是类似于+和*的数值运算符。但是,表达式

   a & b == 7

意谓

   a & (b == 7)

   a + b == 7

意谓

   (a + b) == 7

这就需要经常使用圆括号,以免有意料之外的结果。

一元正号运算符可用于操作数表达式的类型提升。例如下例:

template <class T> void f(T const& a, T const& b){};int main() {	int a;	int b;	f(a, b); // won't work! different values for "T"!	f(+a, +b); // works! T is "int*" both  }

安全问题

下表指出了各个运算符可能导致的安全问题:

相关

  • 消化性溃疡消化性溃疡(英语:peptic ulcer disease,简称PUD),又称胃及十二指肠溃疡。这是指胃、小肠前段(十二指肠)或幽门,有时也包含了食道下端的黏膜损伤(溃疡)。在胃发生的溃疡称作胃溃疡(英语:s
  • 肌酸激酶肌酸激酶(英语:Creatine kinase,又称为肌酸磷酸激酶,简称为CK或CPK,EC 2.7.3.2)在磷酸肌酸合成途径中起到可逆催化肌酸形成磷酸肌酸的作用,正反应过程中需要ATP提供磷酰基,磷酸肌酸
  • 奇事超自然(Supernatural)又称灵异现象,包含了超自然现象和超自然力量,即无科学根据而所谓在自然界的力量或现象。一旦超自然能够被证实,则它就不再是超自然了。超自然超出科学的范畴
  • 皮耶罗·迪·科西莫皮耶罗·迪·科西莫(Piero di Cosimo,1462年1月2日 – 1522年4月12日),亦称皮耶罗·迪·洛伦佐(Piero di Lorenzo),是意大利文艺复兴时期的一位画家。科西莫出生于佛罗伦萨,是一位金
  • 刘树杞刘树杞(1890年-1935年),字楚青,是一位中国化学家。中国湖北蒲圻人。1913年官费赴美国留学,就读于伊利诺大学和密歇根大学,获学士学位。后入哥伦比亚大学深造,1919年获博士学位。1921
  • 黄背梅鲷黄背梅鲷(学名:),又称黄背乌尾鮗,为辐鳍鱼纲鲈形目乌尾鮗科的其中一个种。本鱼分布于印度洋区,包括东非、科摩罗、毛里求斯、塞舌尔群岛、亚丁湾、马尔代夫、斯里兰卡、印度、安达
  • 迈克·吉亚奇诺迈克·吉亚奇诺(Michael Giacchino,1967年10月10日-)是一名美国作曲家,艾美奖、多次格莱美奖、金球奖和奥斯卡金像奖获得者,其作品主要为影视音乐。他的一些非常著名的作品包括电
  • 沙午铁路褡午铁路,始于京广铁路的褡裢站(现称沙河市站),经沙河市、武安市,到午汲站与邯磁铁路接轨。由于褡裢站改名为沙河市站,褡午铁路现已改名为沙午铁路。建于1958年。该铁路沿线矿产丰
  • MacPhersonMacPherson或Macpherson可以指:
  • 阿兰·阿斯佩阿兰·阿斯佩(法语:Alain Aspect,1947年6月15日-),出生于阿让,法国物理学家、卡尚高等师范学校校友。1980年代早期,当他作博士论文时,他做了验证贝尔不等式的实验,揭示了阿尔伯特·爱