##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自动转换成布尔值,由输入流的状态决定.