C和C++运算符

✍ dations ◷ 2025-12-03 12:08:18 #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  }

安全问题

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

相关

  • 托马斯·哈克尔·韦勒托马斯·哈克尔·韦勒(Thomas Huckle Weller,1915年6月15日-2008年8月23日)是一位美国病毒学家。1954年,他与约翰·富兰克林·恩德斯、弗雷德里克·查普曼·罗宾斯一同被授予了诺
  • 马修·卡索维茨马修·卡索维茨(Mathieu Kassovitz,1967年8月3日-),法国电影演员及导演制片人编剧,27岁便凭法国电影《恨》获得戛纳电影节最佳导演奖。他还出演过电影《天使艾米丽》中的男主角。
  • 戈达德太空飞行中心戈达德太空飞行中心(Goddard Space Flight Center)是美国国家航空航天局一个主要研究中心,位于华盛顿特区东北方约6.5公里处马里兰州的绿带城。戈达德太空飞行中心成立于1959年
  • 男士胸罩男士胸罩指男性使用的胸罩,和女士胸罩很像。男性需要穿戴胸的原因并非单一,而这些男士胸罩是专门为男士穿戴而设计,而并非单单只是让男生穿戴为女生设计的胸罩,尽管一些有异装癖
  • 低血镁症低血镁症(Hypomagnaesemia)是描述血液中的镁离子含量低于正常值的现象。正常人体内的血镁约介于 1.7–2.2 mg/dL 之间,如果血镁值低于 1.7 mg/dL(0.7 mmol/L)就是低血镁症。症
  • 蕾蜜·海德利蕾蜜·海德利是福克斯电视网出品的电视剧《豪斯医生》中的重要角色之一,扮演者为奥利维亚·王尔德。她是医学博士,曾是格里高利·豪斯医生的第二批诊断小组的成员。该人物的绰
  • 何宗勋何宗勋,台湾知名社会运动人物,主张废除死刑。2010年,何宗勋发起评选“社运风云人物”,该年(第1届)得奖人是陈椒华与文鲁彬。
  • 东经九十度洋脊东经九十度洋脊是印度洋的洋脊,位于北面的安达曼群岛和南面的印度洋东南海岭之间,全长约5,000公里,平均宽度200公里,北部和南部分别在4,320万年和8,180万年形成。坐标:3°S 90°E
  • 泰·布利尔泰勒·杰拉德·“泰”·布利尔(英语:Tyler Gerald "Ty" Burrell,1967年8月22日-)是美国的一位演员和喜剧演员。他最著名的角色是ABC情景喜剧摩登家庭中的Phil Dunphy角色,这个角色
  • 奇迹时间补时《奇迹时间补时》(기적의 시간 로스타임)是从2016年2月10日开始,在KBS2播出的电视剧。