C和C++运算符

✍ dations ◷ 2025-11-16 03:44:46 #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  }

安全问题

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

相关

  • 催眠催眠术(Mesmerism or Hypnotism)最早出现于18世纪中叶的奥地利,弗朗茨·梅斯梅尔(Franz Anton Mesmer 1734-1815)将其理论化和系统化, 然后以他的名字定名催眠术为Mesmerism,后来
  • 脸(“脸”通“面”、脸又称脸孔、脸庞、颜脸)是人类和动物的多种感觉器官的集合。脸通常位于头部的正面,而且通常只有一个。脸的范围约为额至颔。包括额、眉、睫毛、眼、鼻、耳
  • 自动变形监测系统变形监测是指使用专门的仪器和利用一定的方法对变形体在外力作用下形状或体积的变化进行系统性的观测的一种测量工作。变形监测得到的观测值是作变行分析、预见性维护等的主
  • 真蛸胺章胺(或称章鱼胺,真蛸胺)是一种与去甲肾上腺素相关的内源生物胺,见于多种动物组织中,是某些无脊椎动物的主要神经递质。生物内D-(−)-章胺是由酪胺在多巴胺β-羟化酶催化下羟基化
  • 阿什利阿什利国家森林(英语:Ashley National Forest)是美国的一处国家森林,1908年7月1日建立,位处犹他州东北部、怀俄明州西南部,占地面积约1,382,346英亩(5,594.16平方千米),最近的城市为
  • 李坦密丰君(韩语:밀풍군,1688年3月29日(二月二十八)-1729年4月26日(三月二十九)),讳李坦(韩语:이탄),是朝鲜王朝时代的王族成员,曾被拥立为朝鲜国王。李坦是临昌君李焜的儿子,凝川郡夫人朴氏所生
  • 地磁北极地磁北极是地球表面地球磁场方向垂直向下的点。地磁北极与地理北极并不相同。地磁北极正在不断的改变,以每天20.5米的速度移动。另外,由于地球磁场并不是完全对称的,地磁北极与
  • 李志坚 (浙江)李志坚(1928年5月1日-2011年5月2日),中国著名电子学家,中国科学院院士,原清华大学微电子学研究所所长。浙江宁波人。1951年,毕业于浙江大学物理系,获分配到上海同济大学任教。1958年
  • 新都区新都区是中国四川省成都市的一个市辖区,位于成都市北部,距离成都市中心天府广场约20公里,是成都的八大卫星城之一、城北副中心,城区已与成都五城区、青白江区、广汉市连成一片,是
  • 崔泰福崔泰福(韩语:최태복,1930年12月1日-),出生于朝鲜平安南道南浦市港口区。万景台革命学院毕业,曾留学东德的莱比锡工业大学。1978年9月,担任金策工业大学校长。1981年5月任教育委员会