C和C++运算符

✍ dations ◷ 2025-12-04 02:03:22 #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  }

安全问题

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

相关

  • 天堂的孩子们《天堂的孩子们》(法语:Les Enfants du Paradis)是一部1945年出品的法国黑白电影,片长183分钟,导演马赛尔·卡尔内,编剧雅克·普莱卫,由阿尔莱蒂,让-路易·巴罗尔,玛丽娅·卡莎蕾,皮埃
  • 再生在生物学中,再生是指由基因组、细胞、微生物和生态系统对在自然环境下所造成的自身损伤的一种重建、恢复和发育的过程。从细菌到人类,任何物种都有再生能力。再生可以是完全性
  • 刘以训刘以训(1936年5月5日-),中国生殖生物学家。生于山东安丘。1963年毕业于复旦大学生物系内分泌专业。1966年毕业于中国科学院研究生院。中国科学院动物研究所研究员。1999年当选为
  • 3-己醇3-己醇,是一种醇类的有机化合物,是在三号碳上接羟基的己醇。它的化学式是C6H13OH、示性式 是C3H7CH(OH)C2H5,是正己醇的一种异构物。 3-己醇有一个手性中心,故存在光学异构物。3
  • 维多利亚英语:Peace and Prosperity 中文:维多利亚州(英语:Victoria,缩写为VIC),简称维州、维省,是澳大利亚的州。维州位于澳大利亚东岸南部,全州现划分为79个地方政府区域。维多利亚州乃澳
  • 儒略年儒略年(符号:a)是天文学中测量时间的测量单位,定义的数值为365.25天,每天为国际单位的86400秒,总数为31,557,600秒。这个数值是西方社会早期使用儒略历中年的平均长度,并且是这个单
  • 银版摄影法银版摄影法(英语:Daguerreotype)是法国巴黎一家著名歌剧院的首席布景画家达盖尔,于1839年发明的利用水银蒸汽对曝光的银盐涂面进行显影作用的方法。这种摄影方法的曝光时间约为3
  • ATC代码 (N02)A·B·C·D·G·H·QI·J·L·M·N·P·R·S·VATC代码N02(镇痛药)是解剖学治疗学及化学分类系统的一个药物分组,这是由世界卫生组织药物统计方法整合中心(The WHO Collaboratin
  • 舞袖站舞袖站(韩语:무수역)是朝鲜民主主义人民共和国咸镜北道富宁郡舞袖劳动者区的一个铁路车站,属于茂山线。茂山线
  • 类数公式在数论中,类数公式涉及了许多重要的不变量,是数域到其特殊的戴德金zeta函数赋值。数域 有扩张=rrKK戴德金zeta函数记为: ζ