表达式
运算过程中,一把小整数类型通常会被提升为较大的整数类型,一般会被转化成int类型
1. 运算符的重载
IO库中的<< 、>>以及string、vector等的运算符都是重载运算符
当一个对象被用作右值的时候,用的是对象的内容;当对象被用作左值的时候,用的是对象的地址。
右值的地方可以使用左值来代替,但是不能把右值当做左值来使用,当一个左值被当做右值来使用时,实际使用的是它的内容
decltype(*p)的结果是int&,是一个引用
decltype(&p)的结果是int**,指向整型指针的指针
运算符的优先级中括号的优先级最高
对于没有指定执行顺序的运算符来说,如果表达式指向并修改了同一个对象,将会引发错误并产生未定义的行为
如:
int i = 0;
cout<<i<<++i<<endl;
cout之后的语句没有先后顺序,并不知道先运算++i再输出所有i(1,1)
还是先输出第一个i,再计算++i,再输出第二个i(0,1)
逻辑与 (&&)、逻辑或(||) 运算符只有当左侧运算对象无法确定表达式的结果时才会计算右侧的运算对象
比如表达式f()+g()*h()+j(),这四个函数并不知道会先调用哪个函数
遇到这种问题时加上括号来强制让表达式的组合关系符合程序逻辑关系的要求
一元运算符的优先级最高,其次是乘法和除法,最低的是加法和减法
c++新标准规定商一律向0取整
if(i<j<k) //i与j的比较结果(真假)再和k比较
if(i<j && j <k) //这样才符合要求
if(v == true) //如果v是bool类型,没问题;如果v不是bool类型,程序先把true转换成非0整数,再和v比较
如果要判断true是否为真,应该用if(v)比较安全