C++ primer目录

2023-11-20

目录


第1章 快速入门


1.1  编写简单的C++程序
1.2 初窥输入/输出
1.2.1  标准输入与输出对象
1.2.2  一个使用IO库的程序
1.3 关于注释
1.4 控制结构
1.4.1  while语句
1.4.2  for 语句
1.4.3  if 语句
1.4.4  读入未知数目的输入
1.5  类的引入
1.5.1  Sales_item类
1.5.2  初窥成员函数
1.6  C++程序


小结
术语定义


第一部分 基本语言


第2章 变量和基本类型


2.1  基本内置类型
2.1.1 整型
2.1.2 浮点型
2.2 字面值常量
2.3 变量
2.3.1 什么是变量
2.3.2 变量名
2.3.3 定义对象
2.3.4 变量初始化规则
2.3.5 声明和定义
2.3.6 名字的作用域
2.3.7 在使用处定义变量
2.4  const 限定符
2.5 引用
2.6  Typedef名字
2.7 枚举
2.8 类类型
2.9 编写自已的头文件
2.9.1 设计自己的头文件
2.9.2 预处理器的简要介绍


小结
术语定义


第3章 标准库类型


3.1  命名空间的using声明
3.2  标准库string类型
3.2.1  string对象的定义和初始化
3.2.2  string对象的读写
3.2.3  string对象上的操作
3.2.4  string对象中字符的处理
3.3  标准库vector类型
3.3.1  vector对象的定义和初始化
3.3.2  vector对象上的操作
3.4  迭代器的引入
3.4.1  迭代器算术操作
3.5   标准库bitset类型
3.5.1  bitset对象的定义和初始化
3.5.2  bitset对象上的操作


小结
术语定义


第4章 数组和指针


4.1  数组
4.1.1 数组的定义和初始化
4.1.2 数组操作
4.2  指针的引入
4.2.1  什么是指针
4.2.2  指针的定义和初始化
4.2.3  指针操作
4.2.4  使用指针访问数组元素
4.2.5  指针和const限定符
4.3  C风格字符串
4.3.1  创建动态数组
4.3.2  新旧代码的兼容
4.4  多维数组


小结
术语定义


第5章 表达式


5.1  算术操作符
5.2  关系和逻辑操作符
5.3  位操作符
5.3.1  bitset对象或整型值的使用
5.3.2  将移位操作符用于IO
5.4  赋值操作符
5.4.1  赋值操作的右结合性
5.4.2  赋值操作具有低优先级
5.4.3  复合赋值操作符
5.5  自增和自减操作符
5.6  指针操作符
5.7  条件操作符
5.8  sizeof操作符
5.9  逗号操作符
5.10  复合表达式的求值
5.10.1  优先级
5.10.2  结合性
5.10.3  求值顺序
5.11  new和delete表达式
5.12  类型转换
5.12.1  何时发生隐式类型转换
5.12.2  算术转换
5.12.3  其他隐式转换
5.12.4  显式转换
5.12.5  何时需要强制转换
5.12.6  命名强制转换
5.12.7  旧式强制转换


小结
术语定义


第6章 语句


6.1  简单语句
6.2  声明语句
6.3  复合语句(块语句)
6.4  语句作用域
6.5  if语句
6.6  switch语句
6.6.1  使用switch
6.6.2  switch中的控制流
6.6.3  default标号
6.6.4  switch表达式与case标号
6.6.5  switch内部的变量定义
6.7  while语句
6.8  for循环语句
6.8.1  省略for语句头的某些部分
6.8.2  for语句头中的多个定义
6.9   do while语句
6.10  break语句
6.11  continue语句
6.12  goto语句
6.13  try块语句和异常处理
6.13.1  throw表达式
6.13.2  try块语句
6.13.3  标准异常
6.14  使用预处理器进行调试


小结
术语定义


第7章 函数


7.1 函数的定义
7.1.1 函数返回类型
7.1.2 函数形参表
7.2 参数传递
7.2.1 非引用形参
7.2.2 引用形参
7.2.3  vector和其他容器类型的形参
7.2.4 数组形参
7.2.5 传递给函数的数组的处理
7.2.6 主函数main:处理命令行选项
7.2.7 含有可变形参的函数
7.3  return语句
7.3.1 没有返回值的函数
7.3.2 具有返回值的函数
7.3.3 递归
7.4 函数声明
7.5 局部对象
7.5.1 自动对象
7.5.2 静态局部对象
7.6 内联函数
7.7 类成员函数
7.7.1 定义成员函数的函数体
7.7.2 在类外定义成员函数
7.7.3 编写Sales_item的构造函数
7.7.4 类代码文件的组织
7.8 重载函数
7.8.1 重载与作用域
7.8.2 函数匹配与实参转换
7.8.3 重载解析的三个步骤
7.8.4 实参类型转换
7.9 指向函数的指针


小结
术语定义


第8章 标准IO库


8.1 面向对象的标准库
8.2 条件状态
8.3 输出缓冲区的管理
8.4 文件的输入和输出
8.4.1文件流对象的使用
8.4.2 文件模式
8.4.3 一个打开并检查输入文件的程序
8.5 字符串流


小结
术语定义


第二部分 容器与算法


第9章 顺序容器


9.1 顺序容器的定义
9.1.1容器元素的初始化
9.1.2 容器内元素类型的约束
9.2 迭代器和迭代器范围
9.2.1 迭代器范围
9.2.2 使迭代器失效的容器操作
9.3 顺序容器的操作
9.3.1 容器定义的类型别名
9.3.2  begin和end成员
9.3.3 在顺序容器中添加元素
9.3.4 关系操作符
9.3.5 容器大小的操作
9.3.6 访问元素
9.3.7 删除元素
9.3.8 赋值和交换
9.4  vector容器的自增长
9.5 容器的选用
9.6 回顾string对象
9.6.1 构造string的其他方法
9.6.2 修改string的其他方法
9.6.3 只适用于string的操作
9.6.4  string的查找操作
9.6.5  string的比较
9.7 容器适配器
9.7.1 栈适配器
9.7.2 队列和优先级队列


小结
术语定义


第10章 关联容器


10.1 引言:pair类型
10.2 关联容器
10.3  map类型
10.3.1  map的定义
10.3.2  map定义的类型
10.3.3  map对象元素的添加
10.3.4  map对象下标的使用
10.3.5  map::insert的使用
10.3.6  map对象中元素的查找与获取
10.3.7  map对象中元素的删除
10.3.8  map对象的迭代
10.3.9 “单词转换”map对象
10.4  set类型
10.4.1  set对象的定义和使用
10.4.2  “单词排除”集合的构建
10.5  multimap和multiset类型
10.5.1元素的添加与删除
10.5.2 multimap或multiset对象中元素的查找
10.6 容器的使用:文本查询程序
10.6.1 查询程序的设计
10.6.2  TextQuery类
10.6.3  TextQuery类的使用
10.6.4  成员函数的编写


小结
术语定义


第11章 泛型算法


11.1 概述
11.2算法初窥
11.2.1 只读算法
11.2.2 写容器元素的算法
11.2.3 容器元素重新排序的算法
11.3迭代器回顾
11.3.1 迭代器的插入
11.3.2  iostream迭代器
11.3.3 反向迭代器
11.3.4 const迭代器
11.3.5 五种迭代器
11.4 泛型算法的结构
11.4.1 算法的形参模式
11.4.2 算法的命名约定
11.5 容器特有的算法


小结
术语定义


第三部分  类与数据抽象


第12章  类


12.1  类的定义和声明
12.1.1  类定义:扼要重述
12.1.2  数据抽象和封装
12.1.3  关于类定义的更多内容
12.1.4  类声明与类定义
12.1.5  类对象
12.2  隐含的this指针
12.3  类作用域
12.4  构造函数
12.4.1  构造函数初始化列表
12.4.2  默认实参与构造函数
12.4.3  默认构造函数
12.4.4  隐式的类-类型转换
12.4.5  类成员的显式初始化
12.5  友元
12.6  static类成员
12.6.1  static成员函数
12.6.2  static数据成员


小结
术语定义


第13章  复制控制


13.1 复制构造函数
13.1.1  合成的复制构造函数
13.1.2  定义自己的复制构造函数
13.1.3  防止复制
13.2  赋值操作符
13.3  析构函数
13.4  消息处理实例
13.5  管理指针成员
13.5.1  智能指针类的定义
13.5.2  值型类的定义


小结
术语定义


第14章  重载操作与转换


14.1  重载操作符的定义
14.1.1  重载操作符的设计
14.2  输入和输出操作符
14.2.1  输出操作符<<的重载
14.2.2  输入操作符>>的重载
14.3  算术操作符和关系操作符
14.3.1  相等操作符
14.3.2  关系操作符
14.4  赋值操作符
14.5  下标操作符
14.6  成员访问操作符
14.7  自增和自减操作符
14.8  调用操作符和函数对象
14.8.1  与标准库算法一起使用函数对象
14.8.2  标准库定义的函数对象
14.8.3  函数对象的函数适配器
14.9  转换与类类型
14.9.1  转换为什么有用
14.9.2  转换操作符
14.9.3  实参匹配和转换
14.9.4  重载确定和类实参
14.9.5  重载、转换和操作符


小结
术语定义


第四部分  面向对象编程与泛型编程


第15章  面向对象编程


15.1  OOP:概述
15.2  定义基类和派生类
15.2.1  基类的定义
15.2.2  protected成员
15.2.3  派生类
15.2.4  virtual与其他成员函数
15.2.5  公有、私有和受保护继承
15.2.6  友元关系与继承
15.2.7  继承与静态成员
15.3  转换与继承
15.3.1  派生类到基类的转换
15.3.2  基类到派生类的转换
15.4 构造函数和复制控制
15.4.1  基类构造函数和复制控制
15.4.2  派生类构造函数
15.4.3  复制控制和继承
15.4.4  虚析构函数
15.4.5  构造函数和析构函数的虚特性
15.5  继承层次中的类作用域
15.5.1  名字查找在编译时发生
15.5.2  名字冲突与继承
15.5.3  作用域与成员函数
15.5.4  虚函数与作用域
15.6  纯虚函数
15.7  容器与继承
15.8  句柄类与继承
15.8.1  指针型句柄
15.8.2  复制未知类型
15.8.3  句柄的使用
15.9  文本查询示例的回顾
15.9.1  面向对象的解决方案
15.9.2  值型句柄
15.9.3  Query_base类
15.9.4  Query句柄类
15.9.5  派生类
15.9.6  eval函数


小结
术语定义


第16章  模板与泛型编程


16.1  模板定义
16.1.1  函数模板的定义
16.1.2  类模板的定义
16.1.3  模板形参
16.1.4  模板类型形参
16.1.5  非类型模板形参
16.1.6  编写泛型程序
16.2  实例化
16.2.1  模板实参推断
16.2.2  函数模板的显式实参
16.3  模板编译模型
16.4  类模板成员
16.4.1  类模板成员函数
16.4.2  非类型形参的模板实参
16.4.3  类模板中的友元声明
16.4.4  Queue和QueueItem的友元声明
16.4.5  成员模板
16.4.6  完整的Queue类
16.4.7  类模板的static成员
16.5  一个泛型句柄类
16.5.1  定义句柄类
16.5.2  使用句柄
16.6  模板特化
16.6.1  函数模板的特化
16.6.2  类模板的特化
16.6.3  特化成员而不特化类
16.6.4  类模板的部分特化
16.7  重载与函数模板


小结
术语定义


第五部分  高级主题


第17章  用于大型程序的工具


17.1  异常处理
17.1.1  抛出类类型的异常
17.1.2  栈展开
17.1.3  捕获异常
17.1.4  重新抛出
17.1.5  捕获所有异常的处理者
17.1.6  函数try块与构造函数
17.1.7  异常类层次
17.1.8  自动资源释放
17.1.9  auto_ptr类
17.1.10  异常说明
17.1.11  函数指针的异常说明
17.2  命名空间
17.2.1  命名空间的定义
17.2.2  内嵌命名空间
17.2.3  未命名的命名空间
17.2.4  命名空间成员的使用
17.2.5  类、命名空间和作用域
17.2.6  重载与命名空间
17.2.7  命名空间与模板
17.3  多重继承与虚继承
17.3.1  多重继承
17.3.2  转换与多个基类
17.3.3  多重继承派生类的复制控制
17.3.4  多重继承下的类作用域
17.3.5  虚继承
17.3.6  虚基类的声明
17.3.7  特殊的初始化语义


小结
术语定义


第18章  特殊工具与技术


18.1  优化内存分配
18.1.1  C++中的内存分配
18.1.2  allocator类
18.1.3  operator new函数和operator delete函数
18.1.4  布局new表达式
18.1.5  显式析构函数的调用
18.1.6  类特定的new和delete
18.1.7  一个内存分配器基类
18.2  运行时的类型识别
18.2.1  dynamic_cast操作符
18.2.2  typeid操作符
18.2.3  RTTI的使用
18.2.4  type_info类
18.3  指向类成员的指针
18.3.1  成员指针的声明
18.3.2  类成员指针的使用
18.4  内嵌类
18.4.1  内嵌类的实现
18.4.2  内嵌类作用域中的名字查找
18.5  共用体:节省空间的类
18.6  局部类
18.7  内在的不可移植的特征
18.7.1  位域
18.7.2  volatile限定符
18.7.3  链接指令:extern "C"


小结
术语定义


附录A  标准库


索引
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ primer目录 的相关文章

  • 单级和串级pid原理分析以及pid应用与小车的技巧

    这篇文章主要是帮助理解和使用pid 不会讲复杂的代码公式 重点在最后 一定要看到最后 pid可以看作是一种控制器 用来控制某个变量达到你想要的地步 单级pid 这里我举个例子来理解一下 假设有一个水缸 最终的控制目的是要保证水缸里的水位永远
  • 一文讲透彻!RobotFramwork测试框架教程(全能)

    Robot Framwork在业界早已名声大振 有很多刚学自动化测试的伙伴问我 有没有不需要编程就可以玩自动化的方法 有吗 有的 Robot Framwork 我们今天就一篇文章 把它讲得明明白白 一 Robot Framwork简述 Ro
  • 软件外包开发的测试用例

    软件测试用例是一组详细的步骤 输入数据 预期结果和实际结果 用于验证软件是否满足特定需求或功能 编写测试用例的目的是确保软件的质量和性能 今天和大家分享编写软件测试用例的一般步骤 希望对大家有所帮助 北京木奇移动技术有限公司 专业的软件外包
  • 使用web3和infura开发以太坊ethereum区块链

    web3 Github https github com ethereum web3 js web3 js是以太坊提供的一个Javascript库 它封装了以太坊的RPC通信API 提供了一系列与区块链交互方法 使js与以太坊交互变得简单
  • Netty网络框架

    buffer 缓冲区 S2 Channel的flush方法 发送缓冲区中的数据并清空 gt buffer 缓冲区 buffer 发送 gt S3 SocketChannel write 将数据写入到缓冲区 flush 发送缓冲区中的数据并进
  • db2实现两个数相减_DB2 日期相减

    标签 简单方法 使用 days 字符型的日期 2012 01 01 2012 01 11 values days date 2012 01 11 days date 2012 01 01 10 错误示例 sql Append LEFT JO
  • ARM developer suit v1.2免安装教程

    博主按照网上的步骤安装了不下10遍ads 很生气 一次都没成功过 然后卸载后 继续安装 总是出现modify repait unistall那个界面 以为没有卸干净 然后按照网上的删注册表记录的方法 电脑第二天就开不了机了 当然还是没装成功
  • 路由器简单认识

    路由器 是一个三层设备 可以解析到三层 第一层是比特流 电压 电信号 第二层是数据帧 从比特流到数据帧的过程也叫格式化 可以看到MAC地址 第三层是数据包 IP地址 网络层 交换机 网桥 二层设备 区别 1 交换机基于硬件处理 网桥基于软件
  • 简单介绍十几款常用的画架构图流程图的软件

    简单介绍十几款常用的画架构图流程图的软件 draw io draw io是开源免费的在线画图工具 还提供桌面版本 特性 实时协作 支持在线离线版本 存储支持多种方式 Google Drive OneDrive GitHub GitLab D
  • 非常优秀的网站设计案例,设计师必备

    厚积才能薄发 一个优秀的设计师的天性一定是想要获得更多网站设计灵感 擅于为新项目寻找创意切入点 搜索设计参考资源 最新的设计趋势 今天为大家带来了一组免费可商用的网站设计案例 通过这些网站设计案例 你可以获得 寻找不同风格的网站灵感 配色
  • 硬件工程师-三极管

    目录 一 机械开关 二 三极管的种类 三 NPN型三极管 N型三极管 四 PNP型三极管 编辑 五 三极管公式 NPN型三极管 PNP型三极管 六 NPN管的继续讲解 三极管的导通电压 PNP管也是一样 三极管的三种状态 判断三极管是放大还
  • 抖音SEO矩阵系统源码开发部署(二)技术搭建+二次开发

    抖音SEO矩阵系统源码开发 是一项技术密集型工作 需要对大数据处理 人工智能等领域有深入了解 该系统开发过程中需要用到多种编程语言 如Java Python等 同时 需要使用一些框架和技术 如Hadoop Spark PyTorch等 以提
  • 文件搜索工具(Python实现)

    文章目录 文件搜索工具介绍 代码实现 实现思路 os walk函数 os path join函数 代码整体编写 打包成exe程序 效果展示 文件搜索工具介绍 文件搜索工具能够基于名称快速定位匹配的文件和文件夹位置 比如Everything就
  • 原来实现GCP用客户端登录这么简单啊

    充满活力的一天开始了 GCP 就是谷歌的一个云服务 进入VM实例列表通过 SSH 点击 在浏览器窗口打开 进入VPS服务器 下图 切换到管理员用户 sudo i 编辑sshd config文件 vi etc ssh sshd config
  • 一个jq投票,无论成功与否3秒后自动关闭提示框

    原文地址 http blog csdn net zjb574 article details 7759447
  • 超详细的Vue-router (路由)

    由于Vue在 开发时对路由支持的不足 于是官方补充了vue router插件 vue的单页面应用是基于路由和组件的 路由用于设定访问路径 并将路径和组件映射起 来 传统的页面应用 是用一些超链接来实现页面切换和跳转的 在vue router
  • 解决vCharts不兼容Echarts5+版本问题

    背景 在实际开发项目中 发现老项目里同时用到了vCharts和Echarts 此时的Echarts是低版本 并不会出现问题 但在漏洞扫描中Echarts需升级 此时项目开始报错 v charts 不能和echarts5 版本同时存在 当时的
  • 如何快速构建CMBD系统-glpi

    脚本后续更新及迭代将由kkitDeploy项目代替 https github com luckman666 kkitdeploy server 请大家持续关注kkitDeploy 一 CMBD系统构建步骤 起初 开发这套CMBD系统是为了帮
  • 华为OD机试真题-最大平分数组【2023Q1】

    题目描述 给定一个数组nums 可以将元素分为若干个组 使得每组和相等 求出满足条件的所有分组中 最大的平分组个数 输入描述 第一行输入 m 接着输入m个数 表示此数组 数据范围 1 lt M lt 50 1 lt nums i lt 50

随机推荐

  • Go语言里面的各种疑难杂症

    什么是闭包 闭包有什么缺陷 func AddUpper func int int var n int 10 return func x int int n n x return n func main f AddUpper fmt Prin
  • System Poles and Zeros 系统零点和极点

    LTI系统 连续的有s传递函数 离散的有z传递函数 s jw 所以连续传递函数的零极点都对应频率值 零点的物理意义是 某个频率的输入信号 正弦信号 不会产生任何输出 被block掉了 极点的物理意义是 某个频率的输入信号会产生无穷大的输出
  • C语言void指针(void*)

    Void指针 void 是一种通用指针类型 可以用来存储任何类型的指针 但不能直接解引用 在C语言中 void指针可以用来实现对类型不确定的数据的操作 或者用作函数的参数和返回类型 以便于处理不同类型的数据 以下是一些常见的void指针的用
  • 微信小程序消息订阅推送消息后端服务(.net core)

    废话不多说直接上代码 分为三部分 第一获取微信模板信息需要token 第二步发送微信模板信息 注意 该方法不需要进行任何修改 参数 access token 是第一步获取到的token 参数 body 是json字符串格式提示信息内容 第三
  • Cannot read property bindings of null 解决方法

    安装 babel preset env yarn add babel preset env 或 npm install babel preset env webpack config js presets env 替换成 presets b
  • rabbitmq基础2——rabbitmq二进制安装和docker安装、基础命令

    文章目录 一 RabbitMQ安装 1 1 二进制安装 1 2 rabbitmqctl工具 1 3 docker安装 二 rabbitmq基础命令 2 1 多租户与权限类 2 1 1 创建虚拟主机 2 1 2 查看虚拟主机信息 2 1 3
  • 泛微最新漏洞汇总

    泛微OA e cology前台接口SQL注入漏洞 POST mobile browser WorkflowCenterTreeData jsp node wftype 1 scope 2333 HTTP 1 1 Host Content T
  • 个人技术总结——uview-plus下的Http请求基本使用及相关使用

    这个作业属于哪个课程 软件工程 23年春季学期 这个作业要求在哪里 软件工程实践总结 个人技术总结 这个作业的目标 个人技术总结 其他参考文献 构建之法 CSDN社区 uni app官方文档 uview plus官方文档 目录 一 写在前面
  • vue发展历史简介

    基本介绍 Vue 是一套用于构建用户界面的 渐进式框架 与其它大型框架不同的是 Vue 被设计为可以自底向上逐层应用 最初它不过是个人项目 时至今日 已成为全世界三大前端框架之一 github 上拥有 17 8万 Star 领先于 Reac
  • mapState的使用(常用)

    mapState作用 可以辅助获取到多个state的值 怎么使用 1 在 vue组件中引入 在js块中引入 import mapState from vuex 2 在 vue组件中computed下定义一个对象 computed mapSt
  • Go中 Redis Client的使用

    文章目录 常见操作 List 操作 Pipeline 使用 在 Go 语言中使用 Redis 时 可以使用第三方库实现 Redis Client 的封装 本文介绍如何使用 Go 语言的 redisClient 去连接 Redis 服务器 并
  • Vue中数组的常用方法

    数组的方法分为变更方法和替换数组 变更方法 push push 方法可向数组的末尾添加一个或多个元素 并返回新的长度 pop pop 方法用于删除数组的最后一个元素并返回删除的元素 改变数组的长度 shift shift 方法用于把数组的第
  • 通过JSP网页连接并读取MySQL数据库中的表

    学习任务要求 配置JDBC使JSP网页能连接MYSQL数据库 用Navicat Premium在MYSQL数据库中建立一张表 在连接好后的JSP网页中显示出MYSQL数据库中的表 前言 在前面 我们已经学习了如何建立 发布和访问JSP网页
  • windows下如何禁止某个特定的应用程序

    windows下如何禁止某个特定的应用程序 最近 想了下如何禁止打开windows下的特定应用程序 查阅资料后终于解决了 下面把具体方法分享给大家 以禁止当前主流游戏 英雄联盟为例 1 win R打开运行栏 输入gpedit msc 2 点
  • 基于SSM框架实现一个用户系统(登录,用户列表,分页,增删改查,用户角色管理功能)

    首先搭建一个Maven工程 配置好Tomcat mybatis等 数据库 tb role tb user user role 这里只给了第一个用户管理员限权 可以对其他用户添加管理员 必须要用第一个用户登录 bean 这三个就不用多说了 直
  • MVC三层架构

    1 MVC三层架构 MVC Model View Controller 是一种常见的软件设计模式 用于组织和管理应用程序的代码和逻辑 它将应用程序分为三个主要部分 模型 Model 视图 View 和控制器 Controller 每个部分都
  • MOS管原理-1

    P型半导体参杂价电子为3的元素 一般为硼 因为硼的价电子比硅少一个 所以在共价键中少了一个电子 留下了空穴 空穴会吸引自由电子过来 入住 所以参与导电的是空穴 N型半导体参杂价电子为5的元素 一般为砷 因为砷的价电子比硅多一个 所以在N型半
  • Java Word转PDF

    两种方式 documents4j groupdocs 一 documents4j 1 添加依赖
  • Springer独立出版

    会议简介 Brief Introduction 2023年触觉与虚拟现实国际会议 ICHVR 2023 会议时间 2023年12月15日 17日 召开地点 中国 北海 大会官网 www ichvr org 2023年触觉与虚拟现实国际会议
  • C++ primer目录

    目录 第1章 快速入门 1 1 编写简单的C 程序 1 2 初窥输入 输出 1 2 1 标准输入与输出对象 1 2 2 一个使用IO库的程序 1 3 关于注释 1 4 控制结构 1 4 1 while语句 1 4 2 for 语句 1 4