上的一篇文章,我引用并且大致注释一下,水平有限。
其实这些说是c++的,对于c语言一样的适用
The operators at the top of this list are evaluated first.
这些操作符从上倒下优先级递减!
Associativity表示执行顺序
Precedence
Operator
Description
Example
Associativity
1 |
::
|
Scoping operator
|
Class::age = 2;
|
none |
2 |
() [] -> . ++ -- |
Grouping operator Array access Member access from a pointer Member access from an object Post-increment Post-decrement
|
(a + b) / 4; array[4] = 2; ptr->age = 34; obj.age = 34; for( i = 0; i < 10; i++ ) ... for( i = 10; i > 0; i-- ) ... |
left to right |
3 |
! ~ ++ -- - + * & (type) sizeof
|
Logical negation 逻辑非 Bitwise complement 按位取反 Pre-increment Pre-decrement Unary minus 负 Unary plus 正 Dereference Address of Cast to a given type 类型转换 Return size in bytes 返回size大小
|
if( !done ) ... flags = ~flags; for( i = 0; i < 10; ++i ) ... for( i = 10; i > 0; --i ) ... int i = -1; int i = +1; data = *ptr; address = &obj; int i = (int) floatNum; int size = sizeof(floatNum);
|
right to left |
4 调用者必须是成员 |
->*
.*
|
Member pointer selector 成员指针解引用 Member object selector 成员对象解引用 |
ptr->*var = 24;
obj.*var = 24;
|
left to right |
5 |
* / % |
Multiplication Division Modulus |
int i = 2 * 4; float f = 10 / 3; int rem = 4 % 3; |
left to right |
6 |
+ - |
Addition Subtraction |
int i = 2 + 3; int i = 5 - 1; |
left to right |
7 |
<< >> |
Bitwise shift left 左移位 Bitwise shift right 右移位 |
int flags = 33 << 1; int flags = 33 >> 1; |
left to right |
8 |
< <= > >= |
Comparison less-than Comparison less-than-or-equal-to Comparison greater-than Comparison geater-than-or-equal-to |
if( i < 42 ) ... if( i <= 42 ) ... if( i > 42 ) ... if( i >= 42 ) ... |
left to right |
9 |
== != |
Comparison equal-to Comparison not-equal-to |
if( i == 42 ) ... if( i != 42 ) ... |
left to right |
10接下来3个也是按位 |
& |
Bitwise AND按位与 |
flags = flags & 42; |
left to right |
11 |
^ |
Bitwise exclusive OR 逻辑异或 |
flags = flags ^ 42; |
left to right |
12 |
| |
Bitwise inclusive (normal) OR 或 |
flags = flags | 42; |
left to right |
13接下两个逻辑 |
&& |
Logical AND 与 |
if( conditionA && conditionB ) ... |
left to right |
14 |
|| |
Logical OR |
if( conditionA || conditionB ) ... |
left to right |
15 |
? : |
Ternary conditional (if-then-else) |
int i = (a > b) ? a : b; |
right to left |
16 |
= += -= *= /= %= &= ^= |= <<= >>= |
Assignment operator Increment and assign Decrement and assign Multiply and assign Divide and assign Modulo and assign Bitwise AND and assign Bitwise exclusive OR and assign Bitwise inclusive (normal) OR and assign Bitwise shift left and assign Bitwise shift right and assign |
int a = b; a += 3; b -= 4; a *= 5; a /= 2; a %= 3; flags &= new_flags; flags ^= new_flags; flags |= new_flags; flags <<= 2; flags >>= 2; |
right to left |
17 |
, |
Sequential evaluation operator |
for( i = 0, j = 0; i < 10; i++, j++ ) ... |
left to right |
下面就不翻译了,大致讲对于一些系统不同导致的操作符优先级的实现不同,副作用吧。
One important aspect of C++ that is related to operator precedence is the order of evaluation and the order of side effects in expressions. In some circumstances, the order in which things happen is not defined. For example, consider the following code:
float x = 1;
x = x / ++x;
The value of <it></it>x is not guaranteed to be consistent across different compilers, because it is not clear whether the computer should evaluate the left or the right side of the division first. Depending on which side is evaluated first, <it></it>x could take a different value.
Furthermore, while ++x
evaluates to x+1
, the side effect of actually storing that new value in <it></it>x could happen at different times, resulting in different values for <it></it>x.
The bottom line is that expressions like the one above are horribly ambiguous and should be avoided at all costs. When in doubt, break a single ambiguous expression into multiple expressions to ensure that the order of evaluation is correct.
分享到:
相关推荐
本资源没有描述,c++运算符优先级,word版本表格。
运算符优先级解析器 运算符优先级解析器的 Python 程序。 它分析“grammar.txt”中给出的语法和“order.csv”中提供的... “operator_precedence.py”分析语法和优先规则,并减少字符串“i - i + i”,其中 i 代表 id。
以实现对Point类重载"++"(自增)运算符,定义成员函数Point& operator--();Point operator--(int);以实现对Point类重载"--"(自减)运算符,实现对坐标值的改变。程序名:1ab8_1.cpp。 2.编写程序定义一个车...
C++把下标运算符[ ]看成一个双目运算符,其操作数为<基本表达式>和<表达式>,对应的运算符为operator[ ],必须重载为一个成员函数。对于下标运算符重载定义形式如下: 类型 类名::operator[ ](形参) {函数体} ...
#include using std::cout; using std::cin; using std::endl; class complex { public : friend complex operator -(complex &a, complex &b) { complex c; c.s=a.s-b.s; c.x=a.x-b.x; return c; }
operator-overloading-js, JS简单运算符重载库 目录Operator-Overloading-JS安装工具node MODULE ( NPM )浏览器( Bower )Sneak示例重载运算符设计考虑/非常重要/必须阅读。Definig使用运算符重载的上下文
operator-sdk环境搭建 我的电脑环境为windows,安装operator-sdk需要自己编译构建二进制文件。 参考官方文档Compile and install from master 官方给的Prerequisites为: git mercurial version 3.9+ bazaar version...
chaosblade-operator镜像
flink-kubernetes-operator-1.7.0-src.tgz,flink-kubernetes-operator-1.7.0-src.tgz,flink-kubernetes-operator-1.7.0-src.tgz,flink-kubernetes-operator-1.7.0-src.tgz
elm-pratt-parser:elmparser的Pratt自上而下的运算符优先级解析
Operator Precedence Escape Sequences ASCII Chart Data Types Keywords Standard C Library Standard C I/O Standard C String & Character Standard C Math Standard C Time & Date Standard C Memory ...
Operator Precedence Escape Sequences ASCII Chart Data Types Keywords Standard C Library Standard C I/O Standard C String & Character Standard C Math Standard C Time & Date Standard C...
operator-hub-redis-operator
Operator Precedence Escape Sequences ASCII Chart Data Types Keywords Standard C Library Standard C I/O Standard C String & Character Standard C Math Standard C Time & Date Standard C Memory ...
对运算符进行了详细的解析和总结,特别对“”">>"运算符进行了详细的总结和分析了其工作原理。对运算符重载用不同的方法进行了总结。
Kubernetes的OpenTelemetry运算符 该OpenTelemetry运营商是一个的实现。 此时,它具有作为唯一的托管组件。 入门 要将操作员安装在现有集群中,请确保已并运行 : kubectl apply -f ...
安装calico网络组件(仅master节点),上传tigera-operator-3-26-1.yaml和custom-res
tdop.github.io:重印沃恩·普拉特(Vaughan Pratt)关于自上而下的运算符优先级解析的论文
Kubernetes运算符示例 该存储库包含Kubernetes...operator-example$ docker push onuryilmaz/k8s-operator-example部署操作员 $ kubectl create -f deploy/crd.yaml$ kubectl create -f deploy/operator.yaml用法示例
01 ++、–运算符重载函数的格式 ...T & operator--(); // 前置自减运算符的重载函数,函数参数是空 后置运算符作为二元运算符重载,多写一个没用的参数,重载为成员函数的个数如下: T operator