一、内联函数

通常程序在调用函数时,程序会跳转到另一个地址上,意味着会多花开销。使用内联函数,编译器能够将函数调用替换成函数代码。这样会变得稍快一些

在函数原型的地方使用加了inline的函数定义

  1. #include<iostream>
  2. using namespace std;
  3. inline int sum(int a, int b) { return a + b; }
  4. void main() {
  5. sum(, );
  6. }

优点时速度更快些,代价是占用更多的内存。

二、引用变量

1.相当于起了个别名,使用 &

必须在引用时进行初始化

  1. int r = ;
  2. int& b = r;

2.引用作为参数

3.引用的属性

4.引用用于结构

5.引用用于类对象

三、默认参数

默认参数值必须在函数最右边,默认值在原型上指定

  1. #include<iostream>
  2. using namespace std;
  3. int sum(int a, int b = );
  4. void main() {
  5. cout << sum();
  6. }
  7.  
  8. int sum(int a, int b) {
  9. return a + b;
  10. }

四、函数重载

  1. #include<iostream>
  2. using namespace std;
  3. int sum(int a, int b);
  4. int sum(int a, int b, int c);
  5. void main() {
  6. cout << sum(,,);
  7. }
  8.  
  9. int sum(int a, int b) {
  10. return a + b;
  11. }
  12. int sum(int a, int b,int c) {
  13. return a + b + c;
  14. }

五、函数模板

1.模板

  1. #include<iostream>
  2. using namespace std;
  3. template<typename T>
  4. void Swap(T &a,T &b) {
  5. T t;
  6. t = a;
  7. a = b;
  8. b = t;
  9. }
  10.  
  11. void main() {
  12. int a = ;
  13. int b = ;
  14. Swap(a, b);
  15. cout << a << " " << b << endl;
  16.  
  17. double c = 8.5;
  18. double d = 100.5;
  19. Swap(c, d);
  20. cout << c << " " << d << endl;
  21. }

 2.重载模板

允许使用函数重载功能

  1. #include<iostream>
  2. using namespace std;
  3. template<typename T>
  4. void Swap(T &a,T &b) {
  5. T t;
  6. t = a;
  7. a = b;
  8. b = t;
  9. }
  10. template<typename T>
  11. void Swap(T& a, T& b,int w) {
  12. T t;
  13. t = a*w;
  14. a = b*w;
  15. b = t;
  16. }
  17.  
  18. void main() {
  19. int a = ;
  20. int b = ;
  21. Swap(a, b);
  22. cout << a << " " << b << endl;
  23.  
  24. double c = 8.5555;
  25. double d = 100.5555;
  26. Swap(c, d,);
  27. cout << c << " " << d << endl;
  28. }

3.显示具体化

一套模板不一定会对所有的变量同用,比如想要交换结构体的某部分这时候就需要指定具体的变量

指定变量名,会优先使用指定的函数

  1. #include<iostream>
  2. using namespace std;
  3. struct student {
  4. int age;
  5. string name;
  6. };
  7.  
  8. template<typename T>
  9. void Swap(T& a, T& b) {
  10. T t;
  11. t = a;
  12. a = b;
  13. b = t;
  14. }
  15.  
  16. template<typename T>
  17. void Swap(student a, student b) {
  18. student temp;
  19. temp.age = a.age;
  20. a.age = b.age;
  21. b.age = temp.age;
  22. }
  23.  
  24. void main() {
  25. student stu1 = { ,"TOM" };
  26. student stu2 = { ,"老子" };
  27. cout << "交换前stu1 " << stu1.age << endl;
  28. cout << "交换后stu2 " << stu2.age << endl;
  29.  
  30. Swap(stu1, stu2);
  31. cout << "交换前stu1 " << stu1.age << endl;
  32. cout << "交换后stu2 " << stu2.age << endl;
  33. }

(7)C++ 函数2的更多相关文章

  1. Python 小而美的函数

    python提供了一些有趣且实用的函数,如any all zip,这些函数能够大幅简化我们得代码,可以更优雅的处理可迭代的对象,同时使用的时候也得注意一些情况   any any(iterable) ...

  2. 探究javascript对象和数组的异同,及函数变量缓存技巧

    javascript中最经典也最受非议的一句话就是:javascript中一切皆是对象.这篇重点要提到的,就是任何jser都不陌生的Object和Array. 有段时间曾经很诧异,到底两种数据类型用来 ...

  3. JavaScript权威指南 - 函数

    函数本身就是一段JavaScript代码,定义一次但可能被调用任意次.如果函数挂载在一个对象上,作为对象的一个属性,通常这种函数被称作对象的方法.用于初始化一个新创建的对象的函数被称作构造函数. 相对 ...

  4. C++对C的函数拓展

    一,内联函数 1.内联函数的概念 C++中的const常量可以用来代替宏常数的定义,例如:用const int a = 10来替换# define a 10.那么C++中是否有什么解决方案来替代宏代码 ...

  5. 菜鸟Python学习笔记第一天:关于一些函数库的使用

    2017年1月3日 星期二 大一学习一门新的计算机语言真的很难,有时候连函数拼写出错查错都能查半天,没办法,谁让我英语太渣. 关于计算机语言的学习我想还是从C语言学习开始为好,Python有很多语言的 ...

  6. javascript中的this与函数讲解

    前言 javascript中没有块级作用域(es6以前),javascript中作用域分为函数作用域和全局作用域.并且,大家可以认为全局作用域其实就是Window函数的函数作用域,我们编写的js代码, ...

  7. 复杂的 Hash 函数组合有意义吗?

    很久以前看到一篇文章,讲某个大网站储存用户口令时,会经过十分复杂的处理.怎么个复杂记不得了,大概就是先 Hash,结果加上一些特殊字符再 Hash,结果再加上些字符.再倒序.再怎么怎么的.再 Hash ...

  8. JS核心系列:浅谈函数的作用域

    一.作用域(scope) 所谓作用域就是:变量在声明它们的函数体以及这个函数体嵌套的任意函数体内都是有定义的. function scope(){ var foo = "global&quo ...

  9. C++中的时间函数

    C++获取时间函数众多,何时该用什么函数,拿到的是什么时间?该怎么用?很多人都会混淆. 本文是本人经历了几款游戏客户端和服务器开发后,对游戏中时间获取的一点总结. 最早学习游戏客户端时,为了获取最精确 ...

  10. Python高手之路【四】python函数装饰器

    def outer(func): def inner(): print('hello') print('hello') print('hello') r = func() print('end') p ...

随机推荐

  1. 富文本编辑器——百度UEditor插件安装教程

    一.使用环境 Win7 Eclipse jettty9 chrome 二.下载百度UEditor插件 1.下载地址:http://ueditor.baidu.com/website/download. ...

  2. [360前端星计划]BlackJack(21点)(纯JS,附总部学习笔记)

    [360前端星计划]总部学习笔记(6/6) [360前端星计划]详情跳转 游戏界面预览 目录 一.游戏介绍 1.起源 2.规则 3.技巧 二.游戏设计 1.整体UI构思 2.素材采集 3.游戏总规划 ...

  3. OSG+Visual Studio2015项目变量设置;

    OSG源码经过CMAKE编译后: 1.配置OSG环境变量: 用户变量的PATH中添加路径 C:\OSG\bin系统变量中添加新变量OSG_FILE_PATH为 C:\OSG\data 2.VS新建项目 ...

  4. app自动化生成测试报告

    1.首先导入from BeautifulReport import BeautifulReport 参考:https://www.cnblogs.com/may18/p/10445162.html 2 ...

  5. 刚安装的程序要卸载,如何Ubuntu查看程序安装记录

    如果新装一个程序,突然发现需要卸载,又忘记了程序名字,怎么解决呢? /var/log/apt/history.log /var/log/apt/term.log /var/log/aptitude 看 ...

  6. redis 入门之集合

    sadd 将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略.假如 key 不存在,则创建一个只包含 member 元素作成员的集合.当 key 不 ...

  7. mapreduce实验

    代码: public class WordCount { public static void main(String[] args) throws IOException, ClassNotFoun ...

  8. html input标签 要求只能输入纯数字

    在input标签添加以下代码即可 oninput = "value=value.replace(/[^\d]/g,'')" <input type="text&qu ...

  9. 小程序中this.setData的使用和注意事项

    前言:微信小程序中经常需要用到this.setData({})把变量值渲染到视图层,那到底什么是this.setData,如何使用?需要注意哪些?作为一个初学者,分享一点我的经验,希望大家批评指正. ...

  10. linux c 链接详解5-虚拟内存管理

    5. 虚拟内存管理 我们知道操作系统利用体系结构提供的VA到PA的转换机制实现虚拟内存管理.有了共享库的基础知识之后,现在我们可以进一步理解虚拟内存管理了.首先分析一个例子: $ ps PID TTY ...