IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 【C++ Primer Plus(第六版)】第八章-函数探幽总结 -> 正文阅读

[C++知识库]【C++ Primer Plus(第六版)】第八章-函数探幽总结

8.1 内联函数

如何代码时间比调用时间长,则节省的时间只有一小部分;而如果代码很短,使用内敛函数可以节省函数调用的时间和开销。如:

inline double square(double x){return x*x}
  • 内联函数与宏定义联系:
    宏定义的两个缺陷:1. 容易出错。例如:#define QUARE(X) XX ,在使用宏时写成SQUARE(1.1+1.1) ,则出现这样的错误:1.1+1.1 * 1.1 + 1.1 ,正确的做法是:#define QUARE(X) ((X)(X))
    缺陷2:不能按值传递。SQUARE(C++) ,C会增加两次。

8.2 引用变量const

C++中的引用,也相当于C中的地址。引用实际实现的方式如下:
int & rodents = rats; 等价于:int *const pr = &rats ;只不过编译器为我们隐藏了这样的细节。可以看出,pr 只能指向rats,指向的地址不能改变。
在使用函数时,引用作为参数和指针作为参数一样,如果只是使用变量的值,那么参数应该声明为const 修饰,这样不能在函数中修改参数值。

  • 临时变量:
    如果修饰类型不匹配,那么编译器就会生成一个匿名对象,如下两种情况下会生成,请看下图。

在这里插入图片描述

8.3 默认参数

默认参数从右到左开始的。如char * left(const char *str,int n = 1);

8.4 函数重载

函数重载的识别方法是:参数列表必须不同,但是返回值不能作为函数重载判断依据。

8.5 函数模板

一个简单的声明语法是:

template <typedef T> 
void Swap(T &a,T& b);

8.5.1 模板重载

重载的关键是参数不同,而返回值不能作为判断重载的依据。

template <typedef T>
void Swap(T &a,T &b)
{

}
template <typedef T>

void Swap(T a[],T b[],int n)
{

}

8.5.2 模板的局限性

如果T a T b ,a和b是一个数组,那么a = b不能直接赋值。

8.5.3 显示具体化

调用函数优先级:非模板 > 显示生成模板 > 模板生成版本
优先级总结就是:有限匹配不需要转换的函数。

  • 显示具体化:
template <> void Swap<job> (job &j1,job &j2);

8.5.5 实例化和具体化

实例化:template void Swap<int>(int ,int );
显示具体化:template <> void Swap<int>(int ,int);
实例化和显示具体化语法上区别是,显示具体化多了一个<> template <>,记忆方式:显示具体化符号更多就更具体

8.5.6 模板的类型和decltype (C++)

template <class T1,class T2>
void ft(T1 x,T2 y)
{
	type = x + y;  // 那么x 和 y 是什么类型的呢?
}

于是decltype出现了,使用方式和场景。

  • 第一步:
    double x
    delctype(x) w; w是一个double 类型
  • 第二步:
long indeed(int);
decltype(indeed(int))  m; // m是一个long类型,不调用这个函数,而是根据函数的返回值类型判断的。
  • 第三步:
double xx = 4.4;
decltype ((xx)) r2 = xx // r2是一个double & 引用类型
  • 第四步:与var类型相同
int j=3;
int &k=j;
int &n=j;
decltype(j+6) i1; i1是int类型
decltype(100L) i2是long类型
decltype(k+n) i3;    i3是int类型,根据k+n这个表达式判断的类型。

8.5.7 C++11 新增的数据函数声明方式

上边说的decltype可以在已有变量的情况下判断一些不方便的表示类型,但是如下情况下decltype也无法解决。
template <class x,class y>

?type? gt(T1 x , T2 y)
{
	return x+ y;
}

上边这种情况下使用decltype也无法实现。这种情况下,C++11结合decltype定义了一种新的函数声明方式

`double h(int x, float y);`

等价于

`auto h (int x,float y) -> double;

其中,->double被称为后置返回类型。其中是一个占位符,表示后置返回类型提供的类型,这是C++11给auto新增的一种角色。该句法结合decltype,函数定义如下:

auto gt(T1 x,T2 y) - > declttype(x+y)
{
	return x + y;
}

这样就可以返回正确的值了。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-04-06 15:59:31  更:2022-04-06 16:01:54 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 23:42:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码