热门问题
时间线
聊天
视角

C和C++运算符

来自维基百科,自由的百科全书

Remove ads

所有的C语言运算符都被C++语言支持。C语言不支持运算符重载

在不重载时,运算符&&||,逗号运算符),在第一个操作数求值之后有一个顺序点

大部分C与C++运算符也可用于其它程序设计语言如C#JavaPerlPHP等,具有相同的优先级、结合性与语义。

运算符优先级

以下是C++编程语言中的所有运算符的优先级结合性列表。

更多信息 优先级, 运算符 ...
Remove ads

列表

在本表中,abc代表有效值(来自变量或返回值的逐字常量或数值)、对象名称,或适当的左值。

算术运算符

更多信息 运算符名称, 语法 ...

比较运算符

更多信息 运算符名称, 语法 ...

位操作子

更多信息 运算符名称, 语法 ...

其它运算符

更多信息 运算符名称, 语法 ...

语言扩展

更多信息 运算符名称, 语法 ...

注解

在C和C++中对运算符的约束,是语言的语法规范因素所指定的(在对应的标准中),而不是优先级列表。这造成了一些微妙的冲突。例如,在C中,条件表达式的语法是:

   邏輯-OR-表達式 ? 表達式 : 條件-表達式

在C++中则是:

   邏輯-or-表達式 ? 表達式 : 賦值-表達式

因此,这个表达式:

   e = a ? b : c = d

两个语言的语法分析结果并不相同。在C中,这个表达式被解析为:

   e = ((a ? b : c) = d)

这是一个错误的语义,因为条件-表达式的结果并不是一个左值。在C++中,则解析为:

   e = (a ? b : (c = d))

这是一个有效的表达式。

比特逻辑运算符的优先级一直受到批评[1]。在观念里,&和|是类似于+和*的数值运算符。但是,表达式

   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[2];
	int b[3];
	f(a, b); // won't work! different values for "T"!
	f(+a, +b); // works! T is "int*" both  
}
Remove ads

安全问题

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

更多信息 符号, 安全性 ...

参阅

参考资料

Loading content...

外部链接

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads