C和C++运算符

✍ dations ◷ 2025-11-28 19:45: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  }

安全问题

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

相关

  • BMIBMI可能指的是以下几种:
  • 弹道导弹潜舰弹道导弹潜艇(英语:Ballistic Missile Submarine)是一种以发射弹道导弹为主要功能、专用于水底隐身潜航以作为核威慑(nuclear deterrent)武力平台的潜艇类别。世界上最早成军的弹
  • 同心 (几何)在几何学里,同心的物体的中心或中心轴都在同一位置。圆圈、圆球、圆柱、圆环,都可以是同心的。称同心的圆圈为同心圆,同心的圆球为同心球,同心的圆柱为同心柱,同心的圆环为同心环
  • 平方千米阵平方千米阵(英语:Square Kilometre Array,缩写为SKA)是计划中的下一代巨型射电望远镜阵列,工作在0.10–30GHz的波段,有效接收面积可以达到大约1平方公里,灵敏度将比目前世界上最大
  • 歌留多歌留多(かるた)又称“歌牌”、误称为“花牌”。歌留多一字是源于葡萄牙语“carta”,意思为纸牌。歌牌是日本正月(明治维新后改为格里历1月)过年时通常会玩的一种纸牌游戏。常见的
  • 夏克刀登夏克刀登(1898年-1960年),四川德化人,中华人民共和国政治人物。担任西南军政委员会委员,西康省人民政府副主席。1954年,当选第一届全国人民代表大会代表。
  • 阴武卿阴武卿(1527年-1588年),字定夫,号月溪,四川成都府内江县人,明朝政治人物。嘉靖丙辰进士。万历间官至南京兵部尚书。嘉靖三十四年(1555年)乙卯科四川乡试第一名举人(解元),次年联捷进士。
  • A股A股(A share)在所有国家的股市都存在,可以是普通股或优先股。A股是股票市场中一种股票分类,与其相对的是B股。两者区别在于A股的面值多是B股的五倍至十倍,但两者的投票权是相等的
  • 埃德蒙·戈斯埃德蒙·威廉·戈斯(英文:Sir Edmund William Gosse,1849年9月21日 – 1928年5月16日) 英国诗人,作家,文学史家,文学评论家。巴斯勋章获得者。他的自传《父与子》被认为是英国传
  • 金桂华金桂华(1935年1月14日-),中华人民共和国外交官,曾任中华人民共和国外交部参赞、副司长、中华人民共和国外交部发言人、大使,中国外交学会副会长等职。现为亚太安全合作理事会中国