栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

第八章 函数探幽

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

第八章 函数探幽

8.1 C++内联函数

  • 在函数声明前加上关键字inline
  • 在函数定义前加上关键字inline
    程序员请求将函数作为内联函数时,编译器并不一定会满足这种要求。它可能认为该函数过大或注意到函数调用了自己(内联函数不能递归),因此不将其作为内联函数;而有些编译器没有启用或实现这种特性

8.2 引用变量
引用变量的主要用途时用作函数的形参,通过将引用变量用作参数,函数将使用原始数据,而不是其副本

  • int & rodents = rats;
    int &指的是指向int的引用,上述引用声明将rat和rodents互换–它们指向相同的值和内存单元
    引用不同指针,主要差别时,必须在声明引用时将其初始化,而不能像指针那样,先声明,再赋值

-左值是什么?左值参数是可以被引用的数据对象,例如变量,数组元素,结果成员,引用和解除引用的指针。非左值包括字面常量和包含多项的表达式

  • 右值引用,这种引用可指向右值,是使用&&声明,主要目的是让库涉及人员能够提供有些操作的更有效实现

使用引用参数的原因:

  1. 程序员能够修改调用函数中的数据对象
  2. 通过传递引用而不是整个数据对象,可以提高程序的运行速度

值传递,指针传递,引用传递的适用条件:

  • 如果数据对象很小,如内置数据类型或小型结构,则按值传递
  • 如果数据对象是数组,则使用指针,因为这是唯一的选择,并将指针声明为指向const的指针
  • 如果数据对象是较大的结构,则使用const指针或const引用,来提高程序的效率,这样可以节省复制结构所需的时间和空间
  • 如果数据对象是类对象,则使用const引用,类设计的语义常常要求使用引用,这是C++新增这项特性的主要原因

8.3 默认参数

必须使用函数原型。由于编译器通过查看原型来了解函数所使用的参数数目,因此函数原型也必须将可能的默认参数告知程序。方法是将值赋给原型中的参数

char * left(const char * str , int n = 1);

对于带参数列表的函数,必须从右向左添加默认值。即要为某个参数设置默认值,则必须为它右边的所有参数提供默认值

int harpo(int n, int m = 4, int j = 5);

请注意,只有原型指定了默认值,函数定于与没有默认参数时完全相同

8.4 函数重载

函数多态是C++在C语言的基础上新增的功能,函数重载的关键是函数的参数列表—也被称为函数特征标。返回类型不同无法构成重载

8.5 函数模板

函数模板允许以任意类型的方式来定义函数
template
void Snap(AnyType &a, AnyType &b)
{
}
第一行指出,要建立一个模板,并将类型命名为AnyType,关键字template和typename是必需的,另外,必须使用尖括号

函数模板不能缩短可执行程序,使用模板的好处是,它使生成多个函数定义更简单,更可靠。常见情形是,将模板放在头文件中,并在需要使用模板的文件中包含头文件

第三代具体化

  • 对于给定的函数名,可以右非模板函数,模板函数和显式具体化模板函数以及它们的重载版本
  • 显示具体化的原型和定义应以template<>打头,并通过名称来指出类型
  • 具体化优先于常规模板,而非模板函数优于具体化和常规模板

void Swap(job &,job &);

template
void Swap(T &, T &);

template<> void Swap(job &, job &);

-编写模板函数时,一个问题是并非总能直到应在声明中使用那种类型,C++新增的关键字decltype提供了解决方案,例如
template
void ft(T1 x, T2 y)
{
decltype(x+y) xpy = x + y;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/968748.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号