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 | 长度运算符 |
| ?: | 条件运算符 |