c++primer第五版第四章第五章

第四章 表达式

左右值

表达式 可以位于’’=’'左侧 结果 对象做(左/右)表达式
左值表达式 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){
}..
发布了19 篇原创文章 · 获赞 0 · 访问量 1251

猜你喜欢

转载自blog.csdn.net/qq_35459198/article/details/105331435