【共读Primer】21.<4.1> 表达式基…
2018-08-17 09:37:22来源:博客园 阅读 ()
基本概念
一元运算符: 作用于一个运算对象的,比如: &(取地址) *(解引用) ++(自增) --(自减)
二元运算符: 作用于两个运算对象的,比如: + (求和) -(求差) ==(逻辑等) 所有运算符中二元运算符居多。
三元运算符: 作用于三个运算对象的, a > b ? a : b; ([?][ :]) 三元运算符。
运算符之间有优先级和结合律、求值顺序的规则,以方便在多个运算符共存的情况下掌握运算过程。
一般来说参与运算的所有对象都应该是同一个类型,但是在实际的运算过程中只要可以被转换为同一个类型就可以计算。
当操作自定义的类类型时,我们可以将运算符赋予自定义的运算流程,这就叫做运算符重载。
表达式分为左值和右值,右值使用的是对象的内容,而左值使用的是值的具体位置。或者说一句不太严谨,但容易理解的话:左值可被修改,而右值不能
常见的用到左值的运算:
1. 赋值运算符
2. 取地址符
3. 引用运算符和下标运算符
4. 内置类型和迭代器的递增递减运算
左值和右值间的一般规律是,使用右值的地方可以用左值替代,反之则不可以。
优先级与结合律
一般在多于一个运算符的表达式中才存在计算的先后顺序,才会有优先级和结合律的出现,而多个运算符的表达式成为复合表达式
在这里我们说到的优先级与结合律,与数学上所描述的概念完全一致,并且实际的运算表现也完全一致。
6 + 3 * 4 / 2 + 2 ((6 + ((3 * 4) / 2)) + 2)
与数学中的作用一样,括号可以无视优先级与结合律,先计算括号内的值,再计算括号外的值
在下述带队吗中
1. g()的返回值和h()的返回值相乘
2. f() 的返回值先与g()和h()的成绩相加,所得结果再与j()的返回值相加。
3. 对于这些函数的调用顺序C++标准中没有明确的定义
f() + g() *h() + j()
诚挚建议: 在处理符合表达式中的运算顺序无法确定时,尽量使用括号来确定表达式表达了你想要的意思。
#include <iostream> using std::cout; using std::endl; int main() { cout << "6 + 3 * 4 / 2 + 2= "<< 6 + 3 * 4 / 2 + 2 << endl; cout << "((6 + 3) * 4) / 2 + 2="<< ((6 + 3) * 4) / 2 + 2 << endl; cout << "(6 + 3) * (4 / 2 + 2)="<< (6 + 3) * (4 / 2 + 2) << endl; cout << "6 + 3 * 4 / (2 + 2)="<< 6 + 3 * 4 / (2 + 2) << endl; int ia[] = {0,2,4,6,8}; int last = *(ia + 4); cout << "*(ia + 4)=" << last << endl; last = *ia + 4; cout << "*ia + 4=" << last << endl; }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- C++ Primer抄书笔记(二)——变量和基本类型(下) 2020-02-25
- C++ Primer 抄书笔记(二)——变量和基本类型(上) 2020-02-24
- C++ Primer 抄书笔记(一) 2020-02-20
- 【c++primer练习】 typedef与指针、常量和类型别名 2019-11-18
- C++ Primer练习题day2 2019-08-16
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash