c++表达式学习笔记

##vecter赋值运算符
对于类来说,赋值运算的细节由类本身决定,对于vector来说,vector模块重载了赋值运算符号并且可以接受初始值列表

vector<int> vi;               //我们是没有初始化的
vi = {0,1,2,3,4,5,6,7,8,9};  //vi现在含有10个元素

无论左侧运算对象的类型是什么,初始化列表都可以为空,此时,编译器创建一个值初始化的临时量并将其赋值给左侧运算对象

##赋值运算满足右结合律

int ival, jval;
ival = jval = 0;    //jval作为靠左的赋值运算符的右侧运算对象

##自增自减的后置版本
后置版本需要将原始值存储下来以便于返回这个未修改的内容,如果我们不需要修改前的值,那么后置版本就是一种浪费

##后置递增运算符的优先级高于解引用运算符

auto pbeg = v.begin();
while (pbeg != v.end() && *pbeg >= 0)
      cout << *pbeg++ <<endl;

##嵌套条件运算符

finalgrade = (grade > 90) ? "high pass" : (grade < 60) ? "fail" : "pass";

条件运符满足右结合性,意味着 运算对象按照从右向左的顺序组合,靠右边的条件运算构成了靠左边的条件运算的分支

##在输出表达式中使用条件运算符

条件表达式的优先级非常低,使用的时候通常要加上括号.

cout << ((grade < 60) ? "fail" : "pass"));    //输出"pass" 或者 "fail"
cout << (grade < 60) ? "fail" : "pass";   // 输出 0 或者 1
cout << grade < 60 ? "fail" : "pass"    //错误,试图比较count 和 60

##sizeof
1.sizeof 不会只会返回string 和 vector 固定部分的大小
2.sizeof 不会把数组转换成指针,会计算整个数组的大小

##算数转换
1.算数转换的规则定义了一套类型转换的层次,其中元算符的运算对象将转换成最宽的类型.
2.当表达式中既有浮点类型也有整数类型时,整数值将转换成相应的浮点类型.
3.**转换后的类型要能容纳类型所有可能的值.
4.如果有无符号和有符号的,那么都要转换成无符号的.

##其他隐式类型转换
数组转换成指针,数组自动转换成指向数组首元素的指针.
例外:当数组被用作decltype关键字的参数,或者取地址符,sizeof及typeid等运算对象时.

类类型的转换
编译器每次只能执行一次类类型的转换

string s, t = "a value"; //字符串字面值转换成sting类型
while (cin >> s)  //while的条件部分吧cin转换成布尔值

io库定义了从istream 向布尔值转换的规则. cin自动转换成布尔值,由输入流的状态决定.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值