C和C++运算符

✍ dations ◷ 2025-11-21 15:58:59 #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  }

安全问题

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

相关

  • 劳伦大陆劳伦大陆(Laurentia,又称为北美克拉通,North American craton)是地球历史上太古宙时期,约20亿年前由北美洲、格陵兰和西伯利亚东部的克拉通和地体组成。在劳伦大陆上发现的最老的
  • 点心点心可以指:
  • 福隆海水浴场坐标:25°1′15″N 121°56′43″E / 25.02083°N 121.94528°E / 25.02083; 121.94528大型简报室:可同时容纳160人,定时播放片长约18分钟的“走山走水东北角”的影片。 小型简
  • 拉斯维加斯大道拉斯维加斯大道(Las Vegas Boulevard)是美国内华达州拉斯维加斯谷(英语:Las Vegas Valley)地区的一条主要道路,​​以赌场、饭店林立的南侧段落闻名,该段道路区域被称为“赌城大道
  • 数字子频道数字子频道(英语:Digital subchannel)是指在广播上,从同一个数字广播电台或地面数字电视台站所发射的同一个射频频道上同时搭载一个以上独立节目流的技术。这是通过数据压缩技术
  • 马蒂亚斯·波利蒂基马蒂亚斯·波利蒂基(德语:Matthias Politycki,1955年5月20日-),出生于卡尔斯鲁厄,是一位德国作家、小说家、诗人、散文家及有声书作家,是德国作家中的环球旅行者。波利蒂基因小说《
  • 曹煃曹煃(1580年-?年),字在鲁,号聚垣,河南南阳府新野县人,明朝政治人物。万历三十八年庚戌科第三甲第二百四十一名进士。授吏部观政,壬子顺天同考。
  • 胡朝胡朝(越南语:Nhà Hồ/.mw-parser-output .han-nom{font-family:"Nom Na Tong","Han-Nom Gothic","Han-Nom Ming","HAN NOM A","HAN NOM B","Ming-Lt-HKSCS-UNI-H","Ming-Lt-HK
  • 吉姆·邦宁吉姆·邦宁(Jim Bunning;1931年10月23日-2017年5月26日)是美国共和党籍政治人物。他也曾经是一位棒球选手。邦宁的棒球生涯是在1955年至1971年之间,他的位置是投手。1996年,他入选
  • 吴皓吴皓,生于中国北京,美籍华裔生物物理学家、生物化学家,哈佛大学医学院生物化学与分子药理学系教授,美国国家科学院院士。1982年至1985年在北京大学接受医学预科教育,1985年至1988