c++ primer读书笔记:4.1 基础

本文详细介绍了C++中的运算符,包括一元、二元和三元运算符,并重点讲解了重载运算符的特点和限制,同时探讨了左值与右值的概念及其应用,以及运算符的优先级、结合律和求值顺序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

4.1.1基本概念

c++ 定义了多种运算符,其中包括一元运算符,二元运算符,三元运算符。作用于一个运算对象的运算符即是一元运算符,作用于两个运算对象的运算符即是二元运算符。要特别注意,函数调用也是一种特殊的运算符,它对运算对象的数量没有限制。
要理解运算符,首先要理解运算符的优先级结合律以及运算对象的求值顺序

重载运算符

重载运算符时,必须要有一个运算对象是自定义类型,而且重载运算符不会改变运算符的运算对象个数,运算符的优先级和结合律。

左值和右值

左值和右值是一个很难理解的概念。最初在c语言中,左值表示可以位于赋值语句左侧的值,但右值则不能。在C++中,两者的区别则没有那么简单。可以做一个简单的归纳:当一个对象被用作右值时,用的是对象的值(内容),当对象被用作左值的时候,用的是对象的身份(在内存中的位置)。当一个表达式,可以对其取址时,它则可以作为一个左值。
不同运算符对运算对象的要求各不相同,有的需要左值运算对象,有的需要右值运算对象。返回值也不相同,有的返回左值结果,有的返回右值结果。一个重要的原则是:在需要右值的地方,可以使用左值来代替,但是不能把右值当做左值来使用。当一个左值被当做右值使用时,实际使用的是它的内容。

4.1.2优先级和结合律

4.1.3求值顺序

优先级规定了运算对象的组合方式,但是没有说明运算对象按照什么顺序求值,比如:

a = (expr1) + (expr2);

我们无法判断是expr1表达式先求值还是expr2表达式先求值。所以这有时可能造成歧义,比如

int i= 0;
a = i + (++i);          //若先计算左边,a结果为1,若先计算右边表达式,a结果为2

c++中有四种运算符明确规定了运算对象的求值顺序 && 、|| 、(,)、(?:)。
由于重载操作符会使上述四种操作符失去运算对象的求值顺序,所以通常不应该对上述四种操作符进行重载操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值