4.1基础

4.1.1 基本概念

c++定义了

作用于一个对象一元运算对象一元运算符(取地址符,解引用符)

作用于两个对象二元运算对象二元运算符(==,乘法)

作用于三个对象....

函数调用特殊,它对运算对象的数量没有限制

组合运算符和运算对象

运算对象转换

重载运算符

运算符作用于类类型的运算对象时,用户可以自定义其含义

称之为 重载运算符(overloaded operator)

IO库的 >> 和 << ,迭代器使用的运算都是重载的运算符

左值和右值

当一个对象被用作右值时,用的是对象的值(内容)

当一个对象被用作左值时,用的时对象的身份(内存中的位置)

 

  • 赋值运算符需要一个左值作为运算对象,得到的结果也仍然是一个左值
  • 取地址符作用于一个左值对象,返回一个指针,是右值
  • 内置解引用运算符,下标运算符,迭代器运算符,string和vector的下标,的求值都是左值
  • 内置类型和迭代器的递增减运算符作用于左值运算对象

 

关键字decltype作用于表达式(非变量)得到一个引用类型。

p的类型是 int*

因为解引用符号生成左值

decltype(*p)的结果是 int&

decltype(&p)结果是 int**一个指向整形指针的指针

 

4.1.1优先级和结合律

括号无视优先级和结合律

优先级和结合率有何影响?

 

4.1.3求值顺序

对于没有指定执行顺序的运算符来说,如果表达式指向并修改同一对象,会产生错误

 int i= 0;

 cout << I << “ ”<< ++I << endl;    //未定义的

有4种运算符明确规定了运算对象的求值顺序

  • &&  规定先求左侧运算对象的值,只有当左侧运算对象的值为真时才继续求右侧运算对象的值
  • ||
  • ?: (条件运算符)
  • ,(逗号运算符)

求值顺序,优先级,结合律

建议:处理复合表达式

以下两条经验

1.拿不准的时候用括号

2.如果改变了某个运算对象的值,在表达式的其他地方不要再使用这个运算对象

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值