您当前的位置: 首页 >  c++

蔗理苦

暂无认证

  • 4浏览

    0关注

    88博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

2021-09-04 《C++ Primer》学习记录:第4、5、6章

蔗理苦 发布时间:2021-09-16 21:19:59 ,浏览量:4

文章目录
      • 第 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 函数指针

第 4 章 表达式 4.1 基础 4.1.1 基本概念

​ 函数调用也是一种特殊的运算符,它对运算对象的数量没有限制。

(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 函数基础

    ​ 函数的调用完成两项工作:

    1. 用实参初始化函数对应的形参
    2. 将控制权转移给被调用的函数

    ​ 函数结束执行后也完成两项工作:

    1. 返回 return 中的值(如果有)
    2. 将控制权从被调函数转移回主调函数

    ​ 编译器能以任意可行的顺序对实参求值。

    ​ 为了与 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)管理指针形参的三种常用技术

    1. 使用标记指定数组长度

      void print(const char *cp)
      {
          if (cp)
              while (*cp)
                  cout             
    关注
    打赏
    1657823434
    查看更多评论
    0.0777s