文章目录
第四章 表达式
左右值
表达式 | 可以位于’’=’'左侧 | 结果 | 对象做(左/右)表达式 |
---|---|---|---|
左值表达式 | v | 对象、函数 | 地址 |
右值表达式 | x | 值 |
例
&i;
i | 用i的地址,i是左值 |
---|---|
&i | &i是指针,用指针的值,&i是右值,如int *p=&i |
左值 | 右值 | |
---|---|---|
decltype§ | 引用类型,eg.p是int*,返回int& |
求值顺序
f()+g()…
如果几个函数影响同一对象,就error
[!]所以,如果一个f()函数改变了某个对象的值,表达式g()就不要在使用这个对象。但不是绝对的。例外:*++iterator,先++,再解引用,不会有异常。
取模
运算对象 | m%n的符号 |
---|---|
整数 | 和m相同 |
引用_提升性能
可以避免对元素的拷贝
赋值运算符
优先级低
while((i=get_value())!=2){...}
+=_提升性能
复合运算只求值一次
++i_提升性能
相比i++,不需要存储i
i++_应用
方便指针遍历
while(){
*p++;//先++,但是解引用的是p原值,不是p++后的值
...
}
注意——赋值表达式
"="两边的it的值不能变化
while(){
*it=toupper(*it++);//error
}
“.“和”->”
string s="dwa";
string *p=&S;
(*p).size();
p->size();
? :
string s=(..)?"dwa":"wda";
位运算
运算对象 | |
---|---|
整数,建议无符号数 | 看成二进制位 |
标准库bitset |
运算符 |
---|
<<,>>移位 |
~求反 |
&与,|或,^异或 |
sizeof
表达式或类型的字节数
返回:size_t,常量表达式
类成员的两种方式
sizeof(对象.成员);
sizeof(类::成员);
可以获得数组大小
int a[]={1,2,3};
constexpr size_t size =sizeof(arr)/sizeof(*a);//计算数组大小
int arr2[size];//可以用来定义数组
","运算符
for(;;,){}
强制类型转换
const_cast功能:去掉底层const
const char *p;
char *p2=const_cast<char*>(p);//p变成了char*,
第五章 语句
throw表达式
功能:异常检测
if(..){
throw runtime_error("string");c
}
try语句块
功能:异常处理
try{
}catch(runtime_error err){
cout<<err.what()<<endl;//
}catch(xxx){
}..