C和C++运算符

✍ dations ◷ 2025-02-24 04:18:52 #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  }

安全问题

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

相关

  • 麦克·摩尔迈克尔·肯尼思·穆尔(英语:Michael Kenneth Moore,1949年1月28日-2020年2月2日),新西兰工党籍政治家,1972年当选为新西兰国会议员进入政界。曾担任新西兰外交部长、工党领袖并于19
  • 水道水道是一种大型水体的称呼,与海峡相类似。其特征为两边(或多边)各自连通的水体。江河湖泊入海口之前就常有水道。比较著名的水道有:
  • 黄节黄节(1873年-1935年1月24日),原名晦闻,字玉昆,号纯熙。广东顺德甘竹右滩人。中国诗人、历史学家。著有《诗旨纂辞》、《变雅》、《汉魏乐府风笺》、《魏文帝魏武帝诗注》、《曹子
  • 卡米洛·奔索 (加富尔伯爵)卡米洛·奔索,加富尔伯爵(意大利语:Camillo Benso Conte di Cavour,1810年8月10日-1861年6月6日)是意大利政治家,意大利统一运动的领导人物。曾留学过英国,也于后来成立的意大利王国
  • 阿哈尔卡拉基阿哈尔卡拉基 (格鲁吉亚语: ახალქალაქი,意为新城)是格鲁吉亚南部的城市,由萨姆茨赫-扎瓦赫季州管辖,距土耳其边境仅30公里。此城海拔为1,707米,位于扎瓦赫季熔岩台地的
  • 裴民熙裴民熙(韩语:배민희,1979年5月9日-),韩国女演员。
  • 中人中人,是朝鲜王朝第二等人,包括两班与良妾(常民出身之妾)所生的庶子女、商人等,地位在两班之下但在常民之上,常民、白丁、贱民在考取到科举杂科(译科(汉学、蒙学、倭学、女真学)、医科
  • 虚拟摄影棚虚拟摄影棚(Virtual Studio)是一种新型的摄影棚技术。经由人员在虚拟摄影棚内拍摄,并经过后制系统计算合成背景后,能产生与传统摄影棚效果甚异的效果。摄影机追踪系统(Camera Tra
  • 庞家佐乡庞家佐乡,是中华人民共和国河北省保定市高阳县下辖的一个乡镇级行政单位。庞家佐乡下辖以下地区:庞家佐村、东团丁村、张家连城村、西归还村、北归还村、北团丁村、南归还村、
  • 亚硝酸铵亚硝酸铵是亚硝酸的铵盐,化学式为NH4NO2。它被用作灭鼠剂、杀微生物剂和农业上的杀虫剂,对人和水生生物都有很强的毒性。用臭氧或过氧化氢氧化氨,或亚硝酸钡/铅与硫酸铵反应、