exp1?exp2:exp3
class Y {
public:
void fun();
// ...
};
class X { // 假设可以重载"."运算符
public:
Y* p;
Y& operator.()
{
return *p;
}
void fun();
// ...
};
void g(X& x){
x.fun(); //请告诉我,这里的函数fun()到底是X的,还是Y的?
}
"."运算符的本意是引用对象成员的,然而被重载后就不能保证本意,从而带来运算符意义的混淆,如果每个人都这么重载,那更不容易学习C++语言了。A b[10];//A是类 A* p = &a[3]; A* q = &a[3]; p++;//执行后,p指向a[4],记住是指向a[4]!根据C++规定,该操作等同于p+sizeof(A),此时 //p应该比q大A类所占字节的大小,事实上,p并不一定会比q大这么多,因为你把sizeof()运算 //符重载了啊!这时的sizeof(A)并不一定是该类占用的字节大小!
双目运算符 | +,-,*,/,% |
关系运算符 | ==,!=,<,>,<=,>= |
逻辑运算符 | ||,&&,! |
单目运算符 | +(正),-(负),*(指针),&(取地址) |
自增自减运算符 | ++,-- |
位运算符 | |(按位或),&(按位与),~(按位取反),∧(按位异或),<<(左移),>>(右移) |
赋值运算符 | =,+=,-=,*=,/=,%=,&=,|=,∧=,<<=,>>= |
空间申请与释放 | new,delete,new[ ],delete[ ] |
其他运算符 | ()(函数调用),->()成员访问),->*(成员指针访问),,(逗号),[ ](下标) |
. | 成员访问运算符 |
* | 成员指针访问运算符 |
:: | 域运算符 |
sizeof | 长度运算符 |
?: | 条件运算符 |