第四章&第五章 表达式和语句学习笔记(第一遍阅读)

表达式

算术运算符

一元运算符的优先级最高,其次是乘除法,优先级最低的是加减法。
所有运算符都满足做结合律,当优先级相同时,按照从左向右的顺序进行组合。

逻辑和关系运算符

! 逻辑非
&& || 逻辑与 逻辑或
< > <= >=
== !=

关系运算符比较运算对象的大小关系返回布尔值,进行比较运算时,除非比较的对象是布尔类型,否则不要使用布尔型字面值作为运算对象。

if(val){...}    %如果val是任意的非零值,条件为真
if(!val){...}   %如果val是0条件为真
if(val==1){...}

赋值运算符

赋值运算符满足又结合律,赋值运算符优先级较低。

递增和递减运算符

递增和递减运算符有两种形式,前置版本和后置版本。

int i=0j;
j=++i;%j=1,i=1 前纸版本得到的是递增之后的值
j=i++;%j=1,i=2 后置版本得到的是递增之前的值

除非必须,否则不适用递增或递减运算符的后置版本。
如果在一条复合表达式中即将变量+1、-1,又能使用他原来的值,就使用递增递减运算符的后置版本。

auto p=v.begin();
while(p!=v.end()&&*p>=0)
  cout<*p++<<endl;%输出当前值,并将p向前挪动一个元素
% *p++  等价于 *p ++p写法更简洁。

成员访问运算符

.点运算符和->箭头运算符都可以用于成员访问。

n=(*p).size();%解引用运算符优先级低于点运算符,*p要加括号
n=p->size();

条件运算符

条件运算符将简单的if-else逻辑嵌入到单个表达式中。

cond?expr1:expr2;

条件运算符可嵌套使用,最好别超过两到三层。

位运算符

~     %位求反
<<    %左移 
>>    %右移
&     %位与
^     %位异或
|     %位或

sizeof运算符

sizeof运算符返回一条表达式或一个类型名字所占的字节数。
sizeof(char)结果为1;
对引用类型执行sizeof运算得到被引用对象所占空间的大小;
对指针执行sizeof运算得到指针本身所占空间的大小;
对解引用指针执行sizeof运算得到指针指向的对象所占空间的大小,指针不需有效;
对数组执行sizeof运算得到整个数组所占空间的大小;
对string对象或这vector对象执行sizeof运算只返回该类型固定部分的大小。

逗号运算符

含有两个运算对象,按照从左向右的顺序依次求值.

for(...;...;++ix,--cnt)

类型转换

隐式转换 (数组转换成指针,指针的转换)
显式转换
命名的强制类型转换

cast-name<type>(expression)

static_cast
%任何具有明确定义的类型转换,只要不包含底层const,都可以使用static_const
double slope = static_cast<double>(j) / i;

dynamic_cast
%只用于对象的指针和引用.

const_cast
%const_cast只能改变运算对象的底层constconst char *pc;
char *p=const_cast<char*>(pc);

reinterpret_cast
%通常为运算对象的位模式提供较低层次上的重新解释。本质上依赖于机器,使用reinterpret_cast是非常危险的。

语句

条件语句

if语句
if(condition)
 statement1
else
 statement2
switch语句
switch(ch){
 case'a':
    ;
    break;
 case'b':
    ;
    break;
 case'c':
    {
    ;%如果需要为某个分支定义并初始化一个变量,将变量定义在块内
    }
    break;
 default:
    ;
    break;

}

迭代语句

while语句
while(condition)
     statement

当不确定到底要迭代多少次时,使用while循环比较合适。

for语句
for(init-satatmen;condition;expression)
    statement

for(declaration:expression)
   statement
do-while语句
do
  statement
while(condition);

do while语句是先执行循环体后检查条件,不管条件的值如何,至少执行一次循环。

跳转语句

break语句

只能出现在迭代语句和switch语句内部,作用范围仅限于最近的循环或者switch。

continue语句

continue语句终止最近的循环中的当前迭代并立即开始下一次迭代,只能出现在for while 和do-while循环内部。

while(cin>>buf&&!buf.empty()){
     if(buf[0]!='_')
     continue;%接着读下一个输入
}
goto语句

goto语句的作用是从goto语句无条件跳转到同一函数内的另一条语句。不要在程序中使用goto语句,因为它使得程序既难理解又难修改。

end:return;%带标签语句
goto end;

try语句块和异常处理

  1. 异常检测部分使用throw表达式表示他遇到了无法处理的问题
  2. 使用try语句块处理异常,try语句块以关键字try开始,以一个或多个catch语句结束
  3. 一套异常类用于在throw表达式和相关的catch子句之间传递异常具体信息。
if(a == 0)  
{  
    throw "there have zero sorry\n"; //引发异常  
}  
    try
    {  
    cout << "..";  
    }  
    catch(const char *str)  接收异常,处理异常  
    {  
        cout << str;  
        cerr <<"除数为0\n";      
    }  

C++标准库定义了一组类用于报告标准库函数遇到的问题。

  • exception头文件
  • stdexcept 头文件
  • new头文件
  • type_info头文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值