区分&&与&:
int num1;
num1 = 0;
if (false && ++num1) {
cout << "qqqq";
}
else {
cout << "&&:短路与,左边为false,则不会执行右边,num1=" << num1 << endl;
}
注意:进行if(判断条件)时已经执行了()里面的++num,所以在输出else语句时,num1已经+1;
if (false & ++num1) {
cout << "qqqq";
}
else {
cout << "&:与,左边为false,也会执行右边,num1=" << num1 << endl;
}
- &&:短路与,左边为false,则不会执行右边;
- &:与,左边为false,也会执行右边
区分p++与++p
int p=1,q=1;
if (p++ == 2) {
cout << "(p++ == 2)中p立即执行了p+1的操作;p = " << p<<endl;
}
else {
cout << "(p++ == 2)中p是先执行其他操作再执行p++(p+1)的操作;p = "<< p << endl;
}
if (++q == 2) {
cout << "(++q == 2)中q立即执行了q+1的操作;q = " << q << endl;
}
else {
cout << "(++q == 2)中q是先执行其他操作再执行++q(q+1)的操作;q = " << q << endl;
}
- 注意:(在没有括号的情况下)
(p++ == 2)中p是先执行其他操作再执行p++(p+1)
(++q == 2)中q立即执行了q+1的操作
*p++的执行过程
- C++中取值运算符 * 与前置自增运算符++、后置自增运算符++都属于单目运算符,运算符的优先级顺序同为第2级,结合方向为 右到左。
- 其中,* 使用形式为:*p,用于指针变量,前置自增使用形式为 ++i,后置自增使用形式为 ++i。
虽然自增自减的运算符的优先级比较高,但是++p与p++不同;
p++自增运算(也可称之为右++)是在整个运算表达式运算完成后才进行的;
char ch[] = "hello";
char* p = ch;
cout << *p++ << " "<<endl;
cout << *p << endl;
- 所以* p ++是先执行*p操作(即p++以外的其他操作),最后再来执行p++(即p+1)操作;