C和C++运算符

✍ dations ◷ 2025-11-19 06:02: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  }

安全问题

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

相关

  • 国务大臣政治主题国务大臣(日语:国務大臣/こくむだいじん kokumudaijin ?)是日本内阁成员的正式称呼,简称“大臣”,一般也称之为“阁僚”或“阁员”,相当于共和制内阁的部长,如外务大臣、
  • 液化液化指物质由气态转变为液态的过程。气体液化后体积会变成原来的几千分之一,同时放出大量的热,不同的气体具有不同温度和压强的液化临界点,因此加压的同时必须冷却以吸收热。有
  • 马丁·史瓦西马丁·史瓦西(德语:Martin Schwarzschild,1912年5月31日-1997年4月10日),德裔美国天文学家、物理学家。知名德国天文学家卡尔·史瓦西的儿子。瑞士天文学家罗伯特·埃姆登的外甥。
  • 第九城市第九城市(英文名:The9 Limited),是一家网络游戏运营商,总部位于上海。第九城市社区网站简称九城社区发布于1999年8月。凭借独特的创意和人性化的网络生活空间日浏览量达到千万,在2
  • 普拉努瓦斯1法国统计部门在计算土地面积时,不计算面积大于1平方公里的湖泊、池塘、冰川和河口。普拉努瓦斯(法语:Planoise)是法国贝桑松西部的一个市区,于1960年建于普拉努瓦斯的山和Hauts
  • 贺德仁贺德仁,陈朝至唐朝的文学家、政治人物。越州山阴县人。陈朝散骑常侍贺朗之子。贺德仁于堂兄贺德基拜周弘正为师,以擅长文章知名。贺德仁兄弟八人,时人把他们比成汉朝的荀氏。会
  • 伟大的卫国战争 (称呼)伟大的卫国战争(俄语:Вели́кая Оте́чественная война́,转写:Velikaya Otechestvennaya voyna),是苏联绝大部分成员国对1941-45年苏德战争的称呼,概念
  • 六尘六尘,佛教用语及常见的名词,就是我们眼睛所看到的景像(称为色尘)、耳朵所听到的声音(称为声尘)、鼻子闻到的香味和臭味等等(称为香尘)、舌头尝到的酸甜苦辣味等(称为味尘)、身体所摸到
  • 西属撒哈拉西属撒哈拉(西班牙语:,阿拉伯语:صحراء الاسبانية)是西班牙在西撒哈拉沙漠的领土(现西撒哈拉)。1886年,划为西班牙的保护领,1958年,成为海外省。1975年,西班牙和摩洛哥、
  • 敦贺藩敦贺藩(日语:敦賀藩/つるがはん  */?)是日本江户时代位于越前国敦贺郡(福井县敦贺市)一带的藩领,藩厅位于敦贺城,别称鞠山藩。丰臣政权时代为蜂屋氏及大谷氏的领地,之后为松平氏,曾