C和C++运算符

✍ dations ◷ 2025-12-04 10:08:12 #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  }

安全问题

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

相关

  • 基因突变突变(英语:Mutation,即基因突变)在生物学上的含义,是指细胞中的遗传基因(通常指存在于细胞核中的去氧核糖核酸)发生的改变。它包括单个碱基改变所引起的点突变,或多个碱基的缺失、重
  • 窑洞窑洞是一种民居建筑形式,是中国大陆黄土高原地区,例如陕西省和山西省的特色建筑。主要特点是顶上覆土,内部下面方型上面拱型(应天圆地方之说)。多数后面比前面稍窄,呈喇叭形。常见
  • 尿素降低率尿素降低率(urea reduction ratio (URR))、尿素减少率)是用来量化透析治疗充分度的无维度量。U R R =
  • 美国国铁国家铁路客运公司(英语:National Railroad Passenger Corporation),商标和常用称呼Amtrak,中文简称美国国铁或美铁,是美国经营长途和城际铁路客运的营利性公司,创立于1971年5月1日
  • 东部大猩猩东部大猩猩(学名:)是一种大猩猩,且是灵长目中体型最大的。目前东部大猩猩分为两个亚种:东部低地大猩猩()是数目最多的,约有16000头;山地大猩猩()则只有约700头。另外亦有指在布温迪森林
  • 休闲活动休闲活动(英语:recreation),又称康乐或消遣,一种在余暇时进行的活动。通常进行消遣的动机是为了自己的快乐,而不是为了工作或一些正式的理由。在闲暇时会寻找消遣活动,被认为是一种
  • 加拿大国家象征加拿大国家象征是指在加拿大国内或者国外用来象征加拿大或加拿大人的事物。最能代表加拿大的事物是枫叶,使用历史可以追溯到18世纪。如今枫叶被绘制在国旗、国徽以及1分硬币
  • 爱知县第12区爱知县第12区是日本众议院的选区,设立于1994年。北海道 13 | 山形县 4 | 静冈县 9 | 岛根县 3 | 大分县 4福井县 3 | 山梨县 3 | 德岛县 3 | 高知县 3 | 佐贺县 3青森县 4 |
  • 2005世界物理年2005年被国际纯粹与应用物理学联合会定为世界物理年,以纪念爱因斯坦在一百年前发表五篇 里程碑性的论文,并表彰爱因斯坦对近代物理产生的深远的影响。在1905年爱因斯坦一共发
  • 格拉勃街格拉勃街(Grub Street),又译作“寒士街” ,是一条存在于十九世纪的靠近英国伦敦旧区穆菲尔兹(Moorfields)的街道,以其聚集了大量穷困的“寒士”(Hack writer,即“雇佣作家”)、野心勃