C++学习笔记——表达式、语句、函数
来源:互联网 发布:淘宝账号怎么快速升心 编辑:程序博客网 时间:2024/04/30 11:20
这三节的内容特别多但是比较基础,所以我把他们放在了一起,把一些比较重要(个人认为的)的一些知识点记录下来,以便以后查阅。
1.表达式
运算对象的求值顺序与优先级和结合律无关(运算对象可按任意顺序求值),例如:f() + g() * h() + j()
- 优先级规定,先算乘法后算加法
- 结合律规定,f()的返回值先与g()和h()的乘积相加,所得值再与j()的返回值相加。
- 对于这些函数顺序的调用顺序是没有明确的规定
C++新标准规定商一律先0取整(即直接切除小数部分)
对于除法和取模的运算规则
- (-m) / n 和 m / (-n) 都等于 -(m/n)
- m%(-n) 等于 m%n , (-m) % n 和 (-m)%(-n) 等于 -(m%n)
相等与布尔值的碰撞
//只有当 val 等于 1 时才成立,因为布尔值true转换成 val 的类型if(val == true){}
- 赋值运算满足的是右结合律
int ival, *pval;ival = pval = 0; //错误,不能把指针赋值给int
后置递增运算符优先级高于解引用运算符
位操作符
- 与 &:同为 1 才为1
- 或 |:只要一个为 1 就为 1
- 异或 ^: 相同为 0 ,不同为 1
sizeof 运算符
- sizeof运算不会实际求运算对象
- 对引用类型使用sizeof运算得到被引用对象所占空间大小
- 对指针执行sizeof运算得到指针本身所占空间大小非所指对象
- 对解引用指针执行sizeof运算得到指针所指对象所占空间大小,指针不需要有效
- 对数组操作获得整个数组所占空间大小
- 对string对象或vector对象执行sizeof运算返回该类型固定部分的大小,不会计算对象中的元素占用了多少对象。(得到的是string这个类本身占据的空间的大小而不字符串的大小)
2.语句
块:是指用花括号括起来的(可以为空)语句和声明的序列。
一个块就是一个作用域。
break:break语句用于终止离他最近的 while、 do while、 for、 switch,语句并从这些语句之后的第一条语句可是执行。
continue:终止最近循环中的当前迭代并立即开始下一次迭代,适用于while、do while、for循环内部。
try和catch: 将一段可能抛出异常的语句序列放在块里构成 try 语句块,catch处理代码抛出的异常。
throw:存在于语句块中,负责抛出异常并将控制权转移到相关的catch语句中
若一段程序没有 try 语句块且发生了异常,系统会调用 terminate 函数并终止当前程序的执行
try { int a = 1; if (a) { throw runtime_error("input erro"); } } catch (runtime_error err) { cout << err.what() << endl; }
3.函数
局部变量会隐藏全局变量,同时局部变量还会隐藏外层作用域中同名的其他申明(包括函数申明。
具有返回值的函数,在最后的循环语句中应有一条return语句,如没有该程序是错误的,因为有部分编译器无法发现此类错误。
不要返回局部对象的指针或引用,因为函数调用完成,它所占的空间会被释放
函数不能返回数组,但能返回数组的指针或引用
函数重载和const形参
//const指针重载int add(const int* a);int add(int* a);//const引用重载int add(const int& a);int add(int& a);
不同的作用域是无法重载函数的,因为在C++语言中,名字查找发生在类型检查之前
constexpr 函数的要求:返回类型,字面值且只有一个。形参类型,字面值
函数指针
int f(int num);int (*pf)(int num); //pf的括号必不可少pf = &f;
- 当需要返回函数指针时写成后置式
auto f(int num) -> int (*)(int num); //返回函数指针
- 默认实参:通常在函数声明中指定默认实参,函数的定义就不用指定默认实参了,全局变量可以作为默认实参但必须初始化了。
这一节的内容比较零散,希望对大家有帮助,继续加油!!!!
- C++学习笔记——表达式、语句、函数
- C语言表达式 ——学习笔记
- c++primer学习笔记4 - 表达式和语句
- #C语言学习笔记#运算符、表达式和语句
- C++ Primer学习笔记——$7 语句和函数
- 【C++】学习笔记二十一——if语句
- 【C++】学习笔记二十五——switch语句
- C语言学习笔记(三)——条件表达式
- C语言学习笔记(二)——表达式
- 【C++】学习笔记二十二——逻辑表达式
- 【学习笔记】JavaScript——变量、运算符与表达式、语句
- js学习笔记-函数表达式
- Python学习笔记 - 1.变量.表达式.语句
- Lua学习笔记Day2-Lua语法、值与类型、表达式、语句、函数
- 《C和指针》学习笔记三/语句 操作符和表达式 指针的运算/
- C#.NET学习笔记11,12---布尔表达式2组合,if语句
- C Primer Plus学习笔记----第五章运算符、表达式和语句
- C++:函数<学习笔记>
- qt之QHash和QMap的区别
- C++的printf(),以及++i, i++
- HDU-1232 畅通工程
- js 字符串替换
- 结合Scikit-learn介绍几种常用的特征选择方法
- C++学习笔记——表达式、语句、函数
- http
- 十五 iOS之 酷炫弹幕
- libevent的笔记
- 数据类型检测
- 移动端1像素的边框
- MaterialDesign之对TabLayout的探索
- Filter based mesh denosing (滤波去噪)
- Hibernate的检索方式、级联操作、批处理