C和C++运算符

✍ dations ◷ 2025-11-09 02:35:33 #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  }

安全问题

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

相关

  • 瓦卢瓦王朝瓦卢瓦王朝(House of Valois),是卡佩王朝的支系,继卡佩家族后承继法国王权,并于1328年至1589年间统治法兰西王国。家族地位较低的成员在阿朗松、安茹、勃艮第和奥尔良等地建立其
  • 迪维尼奥文森特·迪维尼奥(英语:Vincent du Vigneaud,1901年5月18日-1978年12月11日),美国生物化学家,1955年获诺贝尔化学奖。1901年:范托夫 | 1902年:费歇尔 | 1903年:阿伦尼乌斯 | 1904年:拉
  • 白珠树白珠树(学名:Gaultheria leucocarpa var. cumingiana)是杜鹃花科白珠树属白果白珠的变种。分布在中南半岛、台湾岛、菲律宾、马来西亚以及中国大陆的福建、广东、江西、广西、
  • 张肇西张肇西(1940年7月-),生于广西,籍贯河北唐山,中国粒子物理学家,中国科学院理论物理研究所研究员。中学毕业于北京四中,1963年毕业于中国科学技术大学近代物理系。2011年当选为中国科
  • 7号线.mw-parser-output .RMbox{box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12),0 3px 1px -2px rgba(0,0,0,.2)}.mw-parser-output .RMinline{float:none
  • 邦戈哈吉·奥马尔·邦戈(el Hadj Omar Bongo,1935年12月30日-2009年6月8日),非洲国家加蓬终身总统,从1967年起担任总统直至去世。邦戈1935年12月30日出生于法属赤道非洲小城Lewai(现改
  • 颜色列表此列表仅列出常见的色彩,色彩的多样性使得在实际上难以全部列举或命名。另外由于各种显示器在未经校正前有色差存在,因此以下的色彩呈现仅供参考。本列表依三原色光模式、印刷
  • 通用记录法 (牙科)牙医学中的通用记录法是一种牙位表示法,以右上颌-左上颌-左下颌-右下颌的顺序编号,恒牙1-32,乳牙1d-20d或者字母A-T。下表的排列方向和左右标记都以病人方向为准。
  • 阿拉伯撒哈拉民主共和国外交 阿拉伯撒哈拉民主共和国(西撒国)1976年2月27日单方面宣布建国,视整个西撒哈拉为该国法定领土。由于该国大部分领土至今依旧被摩洛哥占领,至今仍未能加入联合国,该国外交一直不
  • 乙坂智乙坂智(Otosaka Tomo,1994年1月6日-),全名乙坂·鲁斯洛·智·尼可拉斯(Otosaka Rousselot Tomo Nicholas),是一名出生于日本福井县但于神奈川县横滨市荣区长大的棒球选手,司职外野手,