- 第 4 章 表达式
- 4.1 基础
- 4.1.1 基本概念
- 4.1.2 优先级与结合律(*)
- 4.1.3 求值顺序
- 4.2 算术运算符
- 4.3 逻辑和关系运算符(*)
- 4.4 赋值运算符(*)
- 4.5 递增和递减运算符
- 4.6 成员访问运算符(*)
- 4.7 条件(三目)运算符(*)
- 4.8 位运算符
- 4.9 sizeof 运算符
- 4.10 逗号运算符
- 4.11 类型转换
- 4.11.1 算数转换(*)
- 4.11.2 其他隐式类型转换
- 4.11.3 显式转换
- 4.12 运算符优先级表(*)
- 第 5 章 语句
- 5.1 简单语句(*)
- 5.2 语句作用域(*)
- 5.3 条件语句
- 5.3.1 if 语句
- 5.3.2 switch 语句
- 5.4 迭代语句
- 5.4.1 while 语句(*)
- 5.4.2 传统的 for 语句(*)
- 5.4.3 范围 for 语句
- 5.4.4 do while 语句(*)
- 5.5 跳转语句
- 5.5.1 break 语句(*)
- 5.5.2 continue 语句(*)
- 5.5.3 go to 语句(*)
- 5.6 try 语句块和异常处理
- 5.6.1 throw 表达式(*)
- 5.6.2 try 语句块(*)
- 5.6.3 标准异常
- 第 6 章 函数
- 6.1 函数基础
- 6.1.1 局部对象(*)
- 6.1.2 函数声明(原型)(*)
- 6.1.3 分离式编译(*)
- 6.2 参数传递
- 6.2.1 传值参数(*)
- 6.2.2 传引用参数(*)
- 6.2.3 const 形参和实参(*)
- 6.2.4 数组形参
- 6.2.5 main:处理命令行选项(*)
- 6.2.6 含有可变形参的函数
- 6.3 返回类型和 return 语句
- 6.3.1 无返回值函数(*)
- 6.3.2 有返回值函数
- 6.3.3 返回数组指针
- 6.4 函数重载
- 6.4.1 重载与作用域
- 6.5 特殊用途语言特性
- 6.5.1 默认实参
- 6.5.2 内联函数和 constexpr 函数
- 6.5.3 调试帮助
- 6.6 函数匹配
- 6.6.1 实参类型转换
- 6.7 函数指针
函数调用也是一种特殊的运算符,它对运算对象的数量没有限制。
(1)左值和右值
简单归纳: 当一个对象被用作右值的时候,用的是对象的值(内容);
当一个对象被用作左值的时候,用的是对象的身份(在内存中的位置)。
在需要右值的地方可以用左值来代替,但是不能把右值当成左值(也就是位置)使用。当一个左值被当成右值使用时,实际使用的是它的内容(值)。
(2)decltype 与表达式
如果表达式的求值结果是左值,decltype 作用于该表达式(不是常量)得到一个引用类型。
如果表达式的求值结果是右值,decltype 作用于该表达式得到该右值的类型。
int *p;
decltype (*p) x; // 等价于 int &x
decltype (&p) y; // 等价于 int **y
4.1.2 优先级与结合律(*)
4.1.3 求值顺序
(1)调用同一对象的运算顺序
对于一些没有指定顺序的运算符来说,如果表达式指向并修改了同一个对象,将会引发错误并产生未定义行为。例如,
int i = 0;
cout :最通用的异常类 exception。只报告异常的发生,不提供额外的任何信息。 < stdexcept >:定义了几种常用的异常类。 Cannot read properties of undefined (reading 'type')
< new >:定义了 bad_alloc 异常类型。见 12.1.2 节
< type_info >:定义了 bad_cast 异常类型。见 19.2 节
对于 exception、bad_alloc 和 type_info 对象,我们只能用默认初始化的方式创建,不允许为这些对象提供初值。其他异常类需要提供一个字符串的初值。
异常类型只定义了一个 what() 成员函数,返回一个提供关于异常文本信息的字符串。
第 6 章 函数
6.1 函数基础
函数的调用完成两项工作:
- 用实参初始化函数对应的形参
- 将控制权转移给被调用的函数
函数结束执行后也完成两项工作:
- 返回 return 中的值(如果有)
- 将控制权从被调函数转移回主调函数
编译器能以任意可行的顺序对实参求值。
为了与 C 语言兼容,可以使用关键字表示函数没有形参:
void f(void) { /* ... */ }
6.1.1 局部对象(*)
6.1.2 函数声明(原型)(*)
6.1.3 分离式编译(*)
6.2 参数传递
6.2.1 传值参数(*)
6.2.2 传引用参数(*)
6.2.3 const 形参和实参(*)
6.2.4 数组形参
(1)管理指针形参的三种常用技术
-
使用标记指定数组长度
void print(const char *cp)
{
if (cp)
while (*cp)
cout
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?