1.参数传递

1)函数调用时,c++中有三种传递方法:值传递、指针传递、引用传递。

给函数传递参数,遵循变量初始化规则。非引用类型的形参一相应的实参的副本初始化。对(非引用)形参的任何修改仅作用域局部副本,并不影响实参本身。

为了避免传递副本的开销,可将形参指定为引用类型。对引用形参的任何修改会直接影响实参本身。应将不需要修改实参的引用形参定义为const引用。

2)引用作为参数的特点:

a.传递引用给函数,被掉函数的形参作为原来主调函数中的实参变量或对象的一个别名使用,所以被调函数中对形参变量的操作就是对其相应的目标对象(主调函数)的操作。

b.使用引用传递函数的参数,在内存中并没有产生实参的副本,他是直接对实参操作。而使用一般变量传递函数的参数,当发生函数调用时需要给参数分配存储单元,形参变量是实参变量的副本。如果传递的是对象,还将调用拷贝构造函数。所以传输数据较大时,使用引用比一般变量传递参数的效率和所占空间都好。

c.使用指针作为函数的参数能达到引用的效果,但是,在被调用函数中同样要给形参分配存储单元,且需要重复使用“*指针变量名”的形式进行运算,容易产生错误且阅读性较差。另一f方面,在主调函数的调用点处,必须用变量的地址作为实参,而引用更加容易使用,清晰。

2.内联函数

内联函数,一般用inline修饰。

1)成员函数称为内联。在类中成员函数全部默认为内联函数。在类中声明的成员函数如果加了inline,则其为内联函数,如果没有加inline,在类外定义该成员函数时加了inline,该成员函数也为内联函数。

2)普通函数称为内联函数。在普通函数的定义或申明前加inline使其成为内联函数。通常编译时,调用内联函数的地方,将不进行函数调用,而是使用函数体替换调用处的函数名。

形式类似宏替换(内联扩展)

3)内联机制适用于优化小的,只有几行而且经常被调用的函数(大多数编译器支持 递归函数的内联)

3.默认参数

1)默认参数只在函数声明中设定一次。只有在无函数声明时,才可以在函数定义中设定。

2)默认参数的顺序自右向左,即一个参数设定了默认值时,其右边的参数都要有默认值

3)默认参数调用时,遵循参数调用顺序,自左向右逐个调用(与第2点分清楚)

4).宏定义和内联函数的区别:宏定义是在预处理阶段进行代码替换,而内联函数是在编译阶段插入代码。宏定义没有类型检查,内联函数有类型检查。

c++中函数的参数传递,内联函数和默认实参的理解的更多相关文章

  1. volatile,可变参数,memset,内联函数,宽字符窄字符,国际化,条件编译,预处理命令,define中##和#的区别,文件缓冲,位域

    1.volatile: 要求参数修改每次都从内存中的读取.这种情况要比普通运行的变量需要的时间长. 当设置了成按照C99标准运行之后,使用volatile变量之后的程序运行的时间将比register的 ...

  2. (inline)内联函数在IOS开发中的使用

    今天在阅读YYKit源码(https://github.com/ibireme/YYKit.git)时发现在YYKitMacro.h组件中大量使用的内联函数,例如此文件中的一个函数 static in ...

  3. 内联函数 —— C 中关键字 inline 用法解析

    一.什么是内联函数 在C语言中,如果一些函数被频繁调用,不断地有函数入栈,即函数栈,会造成栈空间或栈内存的大量消耗. 为了解决这个问题,特别的引入了inline修饰符,表示为内联函数. 栈空间就是指放 ...

  4. JAVA中的内联函数

    在说内联函数之前,先说说函数的调用过程. 调用某个函数实际上将程序执行顺序转移到该函数所存放在内存中某个地址,将函数的程序内容执行完后,再返回到 转去执行该函数前的地方.这种转移操作要求在转去前要保护 ...

  5. C++中内联函数

    目录 什么是内联函数 如何使函数内联 为什么要使用内联函数 inline函数的优缺点分析 什么时候该使用内联函数 正文 在C语言中,我们使用宏定义函数这种借助编译器的优化技术来减少程序的执行时间,那么 ...

  6. C语言中宏定义与C++中的内联函数

    一,宏定义:在预处理的时候把宏定义的内容替换到代码中,正常编译. 1,无参数宏定义和有参数宏定义 (1)宏定义不能加分号,比如:#define  PI 3.24;错的,#define  PI 3.24 ...

  7. 07 c++中的内联函数inline

    文章链接: 问题描述:类中成员函数缺省默认是内联的,如果在类定义时就在类内给出函数定义,那当然最好.如果在类中未给出成员函数定义,而又想内联该函数的话,那在类外要加上 inline,否则就认为不是内联 ...

  8. 【转载】内联函数 —— C 中关键字 inline 用法解析

    转载地址:https://blog.csdn.net/zqixiao_09/article/details/50877383 一.什么是内联函数 在C语言中,如果一些函数被频繁调用,不断地有函数入栈, ...

  9. C++中的内联函数分析

    1,本节课学习 C++ 中才引入的新的概念,内联函数: 2,常量与宏回顾: 1,C++ 中的 const 常量可以替代宏常数定义,如: 1,const int A = 3; <==> #d ...

随机推荐

  1. Codeforces 594D REQ 线段树

    REQ 把询问离线, 我们从n 到 1遍历过去的时候, 把(1 - 1 / p)乘在最靠近当前位置的地方, 然后区间求乘积就好啦. #include<bits/stdc++.h> #def ...

  2. JavaScript将数字转换为大写金额

    用JavaScript将数字转换为大写金额,好了 0.0 To code! var digitUppercase = function(n) { var fraction = ['角', '分']; ...

  3. JavaScript 组数去重demo

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  4. HtmlTestRunner

    1.一般生成报告时,会使用时间来作为报告名称的一部分,引入time这个第三方,使用以下方式格式化当前时间 下面运行最终结果:2019-03-29-14_29_18------>年-月-日-时-分 ...

  5. JDK生成证书:

    JDK生成证书: 在此之前确保本地已安装JDK1.6 1.生成客户端的私钥,客户端的证书 1)keytool -genkey -alias clientkey -keystore kclient.ke ...

  6. mysql解决数据库死锁问题

    为了保证数据的正确性,对数据库进行操作的时候都会进行上锁,也就是进行修改数据的时候同一时间只能有一个进程,当这个进程处理完了,释放锁了,其他进程才可以进行操作! 总是会碰见一些意外情况,导致数据库死锁 ...

  7. ibatis 多种传参方式

    1,在公司项目yuda遇到的传入in语句,如果直接拼接in语句:in (....),sqlmap中使用#...#输出是不行的. 为需要使用: 第三种:in后面的数据确定,使用string传入      ...

  8. Nginx的配置安装和使用

    http://blog.csdn.net/e421083458/article/details/30086413 以后继续更新

  9. 如何将.SQL文件的数据导入到Mysql的数据库中

    一.用cmd的调试环境导入.sql文件中的数据: WinR键打开cmd输入: MySQL -u root -p 进入MySQL后MySQL>use DR;   MySQL> source  ...

  10. redis虚拟内存

    对于redis 这样的内存数据库, 内存总是不够用的. 除了可以将数据分割到多个 redis 服务器以外. 另外的能够提高数据库容量的办法就是使用虚拟内存技术把那些不经常访问的数据交换到磁盘上 如果我 ...