<<运算符的优先级比表达式中使用的运算符高,因此下列代码要用括号括起来来获得正确的运算顺序
#include<iostream>
int main(void){
using namespace std;
int x;
cout<<(x=100)<<endl;
cout.setf(ios_base::boolalpha);
cout<<(x<90)<<endl;
return 0;
}
老式c++实现可能要求使用ios::boolalpha,
而不是ios_base::boolalpha来作为cout.setf()的参数. cout.setf(ios_base::boolalpha);设置了一个标记, 该命令是cout显示true和false
副作用:当判定表达式的值这种操作改变了内存中数据的值是,我们说表达式有副作用(side effect)
顺序点(sequence point)是程序执行过程中的一个点,在这里用作进入下一步前对所有的副作用进行了评估: 在C++,’;'就是一个顺序点
#include<iostream>
int main(void){
using namespace std;
int x;
x=1;
while (x++<10){
cout<<x<<endl;
}
return 0;
}
该表达是while (x++<10) 中,该表达式的末尾是一个顺序点,所以确保副作用后(将x加1)后进入循环体解放.
例:
有副作用: ++x+15
无副作用: x+15
for循环的初始化部分中声明变量
#include<iostream>
int main(void){
using namespace std;
for (int i=0;i<5;i++)
cout<<i<<endl;
return 0;
}
改变for循环步长
#include<iostream>
int main(void){
using std::cout;
using std::cin;
for (int i=0;i<5;i=i+2)
cout<<i<<'\n';
return 0;
}
这里使用using表示声明,而不是using编译指令.
递增运算符和递减运算符
#include<iostream>
int main(void){
using namespace std;
int x;
x=1;
cout<<(++x+1)<<endl;
cout<<(x+++1)<<endl;
return 0;
}
前缀版(位于操作是前面)格式 ++X
后缀版(位于操作是后面)格式 X++
! 前缀版效率比后缀版效率高
递增递减运算和指针
#include<iostream>
int main(void){
using namespace std;
int arr[5]={1,2,3,4,5};
int *p=arr;
cout<<*p<<endl;
cout<<*(++p);
return 0;
}
1 前缀递增 前缀递减 解除引用运算符 同级
(从右向左结合)
2 后缀递增 后缀递减 同级
(从左向右结合)
3 后缀运算符比前缀运算符优先级高
组合运算符
例子:
x+=1 → x=x+1
x*=x+y → x=x*(x+y)
复合语句
C++避开类似循环体必须是一句语句,如果循环体中包含很多条语句,这将很不方便的限制方式,用两个花括号来构造一条复合语句(代码块)[其被视为一条语句].
如果在复合语句中定义一个新的变量,则仅当程序执行该语句块中的语句时,变量才存在.执行完语句后变量将被释放.
#include<iostream>
int main(void){
using namespace std;
int x=100;
{
cout<<x<<endl;
int x=50;
cout<<x<<endl;
}
cout<<x<<endl;
return 0;
}
‘,’ 运算符:
1 分割列表中的变量
2 对表达式完成同的任务允许将这两个表达式C++句法只允许放一个表达式的地方
例子:
1 int i.j; //用作分割列表中的变量
2i++,j++; //连接两个相同的任务
关系表达式
关系运算符:
操作符 | 含义 |
---|---|
< | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
== | 等于 |
!= | 不等于 |
注意:
x=1 读作:x赋值1
x==1 读作:x等于1