运算符,异常处理语句-C++3

一元运算符(作用在一个对象上)和二元运算符(作用在两个对象上)。

左值和右值:当一个对象被用作右值的时候,用的是对象的值(内容),当对象被用作左值的时候用的是对象的身份(地址)。

使用运算符时注意优先级和结合律,括号无视优先级。

int i=1024;

int k=-i;//k=-1024;

bool b=true;

bool b2=-b;//b2==true! 因为b在参与运算时为1,取负值是-1,!=0,所以为true

位运算符:

运算符功能
~位求反
<<左移
->>右移
&位与
^位异或
l位或

*:位异或:两个运算对象对应位置有且只有一个为1则运算结果中该位为1,否则为0.

使用位运算符,例子:假设班里有三十名学生,老师每周对会对学生测验,测验结果只有通过和不通过两种,为了表示我们就用一个二进制位来表示学生在一次测验中是否通过,

unsigned long quiz=0;//我们有三十个人所以至少得用三十二位
quiz|=1UL<<27;//相当于32位0和第二十七1进行位或
//如果发现这个学生其实没有通过
quiz&=~(1UL<<27);//按位取反然后做位与运算

移位运算符(又叫IO运算符)满足左结合律,<<的优先级比赋值运算符和条件元素运算符等级高,所以使用的时候要注意。

cout<<(10<42);//正确,输入10<42的结果真
cout<<10<42;//错误,试图将cout和42比较

隐式转换发生的情况:
1.大多数表达式中,比int小的整型值首先提升为较大的整数类型。
2.在条件中,非布尔值转换为布尔值
3.初始化过程中,初始值转换为变量的类型;赋值语句中,右侧运算对象转换为左侧运算对象的类型。
4.如果关系运算或算数运算运算对象有多种类型,需要转换为同一种类型。
5.函数调用也会发生类型转换。
显式转换
命名的强制类型转换:cast_name(experssion)
static_cast是cast_name的一种,只要不包含底层const就可以使用。double slope =static_cast<double>(j)/i;//强制类型转换的浮点去除法

static_cast对于编译器无法执行的类型转换也非常有用,例如我们可以使用static_cast找回存在void*的指针

void*p=&d;
//正确,void可以存任何地址
double *dp= static_cast<double*>(p);//把void*转回初始指针类型

const_cast可以改变底层const;使得常量可以改变。static_cast不行。但是这个有好有坏,本身的常量被改动后可能会导致意想不到的结果。

reinterpret_cast:这个要慎用,改变类型后导致不会报错,但是运行值改变。指向的是同一个地址,但是对地址内东西的诠释却不相同了。

“reinterpret_cast 运算符并不会改变括号中运算对象的值,而是对该对象从位模式上进行重新解释”。数字只是数字,但是字符会进行ASCII翻译。
对于cast_name的解释来源:

语句

空语句:只有一个分号
有的时候语法上要一个句子但是逻辑上不需要,就比如:

while(cin>>s&&s!=sought)
;//空语句,最好把注释写出来,让别人注意到

复合语句:用花括号括起来的,也被称作块,一个块就是一个作用域,比如:

while(val<=10)
{
sum+=val;
++val;
}

:语句 要注意作用域,超出范围就作用不到
:switch中的case关键字要是常量表达式。

跳转语句
break:负责跳出当前循环。
continue:负责终止当前迭代,并开始下一次迭代。
goto:跳到指定位置,一般不带,理解会比较麻烦。

try语句和异常处理:异常处理机制为程序中异常检测和异常处理这两部分协作提供支持:
throw:异常检测部分使用throw表达式来表示遇到的异常。
try:异常处理部分用try语句块来处理异常,try语句块以关键字try开始,并以一个或多个catch子句结束。try语句块中抛出的异常会被某个catch语句处理。

if(item1.isbn()!=item2.isbn())
throw runtime_error("Data must refer to same ISBN");//如果两个ISBN不一样就抛出runtim_error的异常,终止当前,并抛给能解决的
cout<<item1+item2<<endl;

**标准异常:**exception头文件定义了最通用的异常类exception

exception最常见问题
runtime_error只有运行才检测出的问题
range_error运行时错误,生成超过有意义的值域范围。
overflow_error/underflow_error上下溢出
logic_error逻辑错误
domain_error参数对应结果值不存在
invalid_error无效参数
length_error逻辑错误:试图创造超出该类型最大长度的对象
out_of_range使用超出有效范围的值
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值