C和C++运算符

✍ dations ◷ 2025-11-30 15:07:45 #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  }

安全问题

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

相关

  • 磷酸二酯酶磷酸二酯酶(英语:Phosphodiesterase,简称为PDE)能够水解磷酸二酯键。由于在细胞内生化途径的广泛运用,磷酸二酯酶通常指的是环核苷酸磷酸二酯酶,将环状核苷酸,也就是细胞内第二信使
  • 宗教体验宗教经验(英语:Religious experience),又称灵性经验、神秘经验,指一种主观的个人或群体经验,通常会被解释跟宗教、上帝、神灵、鬼魂、佛、亡灵、或超自然生命干预下的经历。有意见
  • 联邦行政会议澳大利亚主题联邦行政会议是澳大利亚《宪法》下的国家最高行政机关。联邦行政会议的地位大约等同其他英联邦国家的行政会议以及英国和加拿大的枢密院。联邦行政会议由澳大利
  • 韩明浍韩明浍(1415年11月26日-1487年11月28日),字子濬,庵号狎鸥亭、四友堂,本贯清州韩氏,朝鲜王朝前期的文臣及外戚。他是世祖、睿宗、成宗三代的重臣,死后谥号忠成。韩明浍的祖父是艺文馆
  • 化合价化合价(英语:Valence)是由一定元素的原子构成的化学键的数量。一个原子是由原子核和外围的电子构成的,电子在原子核外围是分层运动的,化合物的各个原子是以和化合价同样多的化合
  • 邮局协议邮局协议(英语:Post Office Protocol,缩写:POP)是TCP/IP协议族中的一员,由RFC 1939定义。此协议主要用于支持使用客户端远程管理在服务器上的电子邮件。最新版本为POP3,全名“Post
  • 直接逆转式柴油机直接逆转式柴油机(英语:Direct Reversing Diesel Engine)是一种曲轴可以转向的柴油机。一般常见于大型低转速的船用引擎,低速特性可让螺旋桨有更高的推进效率,无需经过减速齿轮装
  • 林铎 (烈士)林铎(1904年-1927年9月24日),革命烈士,福建上杭人,出身贫寒,中学毕业后进入黄埔陆军军官学校,为第四期学员。林铎于1925年加入中国共产党,北伐战争期间被委派至宁波-上海一线工作。四
  • NuFWNuFW是GPL插件,专为Netfilter(Linux下的防火墙)设计,增添了权限规则过滤器。
  • 沈宸荃沈宸荃(1615年-1652年),字友荪,号彤庵,南明首辅大臣,抗清志士,浙江宁波慈溪观海卫镇师桥昭十三房人。清高宗感其忠义,谥之为忠节。九岁,应童子试,成为廪生。崇祯十二年(1639年),中举人。崇