C和C++运算符

✍ dations ◷ 2025-12-05 06:45:47 #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  }

安全问题

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

相关

  • 锦州市锦州市是中华人民共和国辽宁省下辖的地级市,是辽宁沿海的第二大城市。锦州是连接东北地区和华北地区的交通要冲,也是著名的松锦之战、辽沈战役主战场之一。锦州主城区位于小凌
  • 广岛广岛市(日语:広島市/ひろしまし Hiroshima shi */?)是位于日本广岛县西部的都市,为广岛县首府,也是本州西部的最大都市,人口约119万。原本只是太田川入海口的一个三角洲,自16世纪
  • 青铜时代青铜时代(Bronze Age),又称青铜器时代、青铜文明,在考古学上是以使用青铜器为标志的人类文化发展的一个阶段。青铜是红铜和锡或铅的合金,因为其氧化物颜色青灰,故名青铜。由于青铜
  • 核酶核酶(英语:ribozyme,又译核糖酶),又称核酸类酶、酶RNA、类酶RNA,是具有催化特定生物化学反应的功能的RNA分子,类似于蛋白质中的酶。在核酶的发现之前,酶,其被定义为催化作用的蛋白质,
  • 范海福范海福(1933年8月15日-),生于广东广州,中国晶体学家。1956年毕业于北京大学化学系。1991年当选为中国科学院学部委员(院士)。2000年当选为第三世界科学院院士。 中国科学院物理研
  • 齐格弗里德·科拉考尔齐格弗里德·科拉考尔(Siegfried Kracauer,1889年2月8日-1966年11月26日),德国作家,记者,社会学家,文化评论家和电影理论家,他生于法兰克福,卒于美国纽约。
  • 黑部黑部,为汉字索引中的部首之一,康熙字典214个部首中的第二百〇三个(十二划的则为第三个)。就繁体和简体中文中,黑部归于十二划部首。黑部只以左方、下方为部字。且无其他部首可用
  • 约翰尼斯·狄克曼约翰尼斯·狄克曼(德语:Johannes Dieckmann,1893年1月19日-1969年2月22日),东德政治人物。1949–1969年间担任东德人民议会主席。约翰尼斯·狄克曼生于奥特斯贝格,1915年征召入伍,之
  • 金婆婆与银婆婆金婆婆与银婆婆(日语:きんさんぎんさん ,1892年8月1日—2000年1月23日/2001年2月28日),生于明治时期日本爱知县爱知郡鸣海村(今名古屋市),吉尼斯世界纪录记载的“人类史上最长寿双胞
  • 克洛德·约瑟夫·若弗鲁瓦克洛德·约瑟夫·若弗鲁瓦 (法语:Claude Joseph Geoffroy,1685年-1752年)是位法国药剂师与化学家,为法国医师暨化学家的艾蒂安·弗朗索瓦·若弗鲁瓦(法语:Étienne François Geof