C++运算符优先级
C++运算符优先级

C++运算符优先级

运算符描述例子可重载性
第一级别
::作用域解析符Class::age = 2;不可重载
第二级别
()函数调用isdigit(‘1’)可重载
()成员初始化c_tor(int x, int y) : _x(x), _y(y*10){};可重载
[]数组数据获取array[4] = 2;可重载
->指针型成员调用ptr->age = 34;可重载
.对象型成员调用obj.age = 34;不可重载
++后自增运算符for( int i = 0; i < 10; i++ ) cout << i;可重载
后自减运算符for( int i = 10; i > 0; i– ) cout << i;可重载
const_cast特殊属性转换const_cast(type_from);不可重载
dynamic_cast特殊属性转换dynamic_cast(type_from);不可重载
static_cast特殊属性转换static_cast(type_from);不可重载
reinterpret_cast特殊属性转换reinterpret_cast(type_from);不可重载
typeid对象类型符cout « typeid(var).name();cout « typeid(type).name();不可重载
第三级别(具有右结合性)
!逻辑取反if( !done ) …可重载
not! 的另一种表达
~按位取反flags = ~flags;可重载
compl~的另一种表达
++预自增运算符for( i = 0; i < 10; ++i ) cout << i;可重载
预自减运算符for( i = 10; i > 0; –i ) cout << i;可重载
负号int i = -1;可重载
+正号int i = +1;可重载
*指针取值int data = *intPtr;可重载
&值取指针int *intPtr = &data;可重载
new动态元素内存分配long *pVar = new long;MyClass *ptr = new MyClass(args);可重载
new []动态数组内存分配long *array = new long[n];可重载
delete动态析构元素内存delete pVar;可重载
delete []动态析构数组内存delete [] array;可重载
(type)强制类型转换int i = (int) floatNum;可重载
sizeof返回类型内存int size = sizeof floatNum;int size = sizeof(float);不可重载
第四级别
->*类指针成员引用ptr->*var = 24;可重载
.*类对象成员引用obj.*var = 24;不可重载
第五级别
*乘法int i = 2 * 4;可重载
/除法float f = 10.0 / 3.0;可重载
%取余数(模运算)int rem = 4 % 3;可重载
第六级别
+加法int i = 2 + 3;可重载
减法int i = 5 – 1;可重载
第七级别
<<位左移int flags = 33 << 1;可重载
>>位右移int flags = 33 >> 1;可重载
第八级别
<小于if( i < 42 ) …可重载
<=小于等于if( i <= 42 ) …可重载
>大于if( i > 42 ) …可重载
>=大于等于if( i >= 42 ) …可重载
第九级别
==恒等于if( i == 42 ) …可重载
eq== 的另一种表达
!=不等于if( i != 42 ) …可重载
not_eq!=的另一种表达
第十级别
&位且运算flags = flags & 42;可重载
bitand&的另一种表达
第十一级别
^位异或运算flags = flags ^ 42;可重载
xor^的另一种表达
第十二级别
|位或运算flags = flags | 42;可重载
bitor|的另一种表达
第十三级别
&&逻辑且运算if( conditionA && conditionB ) …可重载
and&&的另一种表达
第十四级别
||逻辑或运算if( conditionA || conditionB ) …可重载
or||的另一种表达
第十五级别(具有右结合性)
? :条件运算符int i = (a > b) ? a : b;不可重载
第十六级别(具有右结合性)
=赋值int a = b;可重载
+=加赋值运算a += 3;可重载
-=减赋值运算b -= 4;可重载
*=乘赋值运算a *= 5;可重载
/=除赋值运算a /= 2;可重载
%=模赋值运算a %= 3;可重载
&=位且赋值运算flags &= new_flags;可重载
and_eq&= 的另一种表达
^=位异或赋值运算flags ^= new_flags;可重载
xor_eq^=的另一种表达
|=位或赋值运算flags |= new_flags;可重载
or_eq|=的另一种表达
<<=位左移赋值运算flags <<= 2;可重载
>>=位右移赋值运算flags >>= 2;可重载
第十七级别
throw异常抛出throw EClass(“Message”);不可重载
第十八级别
,逗号分隔符for( i = 0, j = 0; i < 10; i++, j++ ) …可重载

发表评论