一.内联函数

内联函数和普通函数的使用方法没有本质区别,我们来看一个例子,下面展示了内联函数的使用方法:

#include <iostream>
using namespace std;
//下面展示内联函数的使用
inline double square(double x)
{
return (x*x);
}
int main()
{
int a=;
int b;
b=square(a);
cout<<b;//差点把C++当成Android了...... 就没有写cout,尴尬了
}

从上面我们可以看到我们定义一个内联函数只需要在普通函数的前面加上关键字inline就可以了,利用内联函数的优势则是可以让程序不需要跳转到另一个位置执行代码,直接遇到我们所定义的函数就可以进行执行了。因此会节省一些运行的时间。但是这个函数并没有得到广泛的使用,是因为使用这个,则会在另一方面增大系统的开销。一般前况下,如果执行函数代码的时间比处理函数调用的时间更长,则推荐使用这种方式,但如果执行函数代码的时间比处理函数调用的时间更短,则使用普通函数的效率会显得更高一些,因为我们算的是总体的程序运行时间。不然在第二种情况下,所有的程序资源都用于调用函数上面去了,我觉得实在是太花费时间了。

二.引用变量

1.一般情况下的引用变量是我们现有变量的一个拷贝,相当于我们可以利用一个新的变量名称来代替原变量的使用,下面是一个小例子:

#include <iostream>
using namespace std;
int main()
{
int rats=;
int &rodents=rats;//这里定义了引用变量rodents
cout<<"rats="<<rats;
cout<<",rodents="<<rodents<<endl;
rodents++;
cout<<"rats="<<rats;
cout<<",rodents="<<rodents<<endl;
  

cout<<"rats的地址是"<<&rats<<endl;
cout<<"rodents的地址是"<<&rodents<<endl;

 
}  

输出结果:

rats=,rodents=
rats=,rodents=102

rats的地址是0x6ffe34
rodents的地址是0x6ffe34

 

从中可以知道rats和rodents的值是相同的,就连地址都是相同的。

2.如果我们将第三个变量赋值给rodents变量,会有什么不同呢?

程序如下:

#include <iostream>
using namespace std;
int main()
{
int rats=;
int &rodents=rats;//这里定义了引用变量rodents
int c=41;//这里我们定义的是第三者
cout<<"rats="<<rats;
cout<<",rodents="<<rodents<<endl;
rodents++;
cout<<"rats="<<rats;
cout<<",rodents="<<rodents<<endl;
cout<<"rats的地址是"<<&rats<<endl;
cout<<"rodents的地址是"<<&rodents<<endl;
//下面进入第三者,一个很神奇的第三者
cout<<"下面我们进入第三者"<<endl;
rodents=c;
cout<< "rats="<<rats<<endl;
cout<<"rodents="<<rodents<<endl;
cout<<"rats的地址是"<<&rats<<endl;
cout<<"rodents的地址是"<<&rodents<<endl;
cout<<"c的地址是"<<&c<<endl;
}

结果如下:

rats=,rodents=
rats=,rodents=
rats的地址是0x6ffe34
rodents的地址是0x6ffe34
下面我们进入第三者
rats=
rodents=
rats的地址是0x6ffe34
rodents的地址是0x6ffe34
c的地址是0x6ffe30

这个时候我们可以看到第三者的地址和前两者的地址是不一样的,但是值却是一样的,因为这种情况就相当于将第三者直接复制给了第一者,其间的引用并没有对它产生任何在地址上的影响,这也十分容易理解。

 

C++ : 内联函数和引用变量的更多相关文章

  1. C++命名空间、函数重载、缺省参数、内联函数、引用

    一 .C++入门 1.C++关键字 2.命名空间 3.C++输入&输出 4.缺省参数 5.函数重载 6.引用 7.内联函数 8.auto关键字 9.基于范围的for循环 10.指针空值null ...

  2. C++学习笔记之——内联函数,引用

    本文为原创作品,转载请注明出处 欢迎关注我的博客:http://blog.csdn.net/hit2015spring和http://www.cnblogs.com/xujianqing/ 作者:晨凫 ...

  3. 重构改善既有代码设计--重构手法02:Inline Method (内联函数)& 03: Inline Temp(内联临时变量)

    Inline Method (内联函数) 一个函数调用的本体与名称同样清楚易懂.在函数调用点插入函数体,然后移除该函数. int GetRating() { return MoreThanfiveLa ...

  4. C++ primer(八)--内联函数 引用变量 引用传递函数参数 函数重载/模板/模板具体化

    一.内联函数     常规函数和内联函数的区别在于C++编译器如何将他们组合到程序中.编译过程的最终产品是可执行程序--由一组机器语言指令组成.运行程序时,操作系统将这些指令载入到计算机内存中,因此每 ...

  5. 从零开始学C++之从C到C++(二):引用、内联函数inline、四种类型转换运算符

    一.引用 (1).引用是给一个变量起别名 定义引用的一般格式:类型  &引用名 = 变量名: 例如:int a=1; int  &b=a;// b是a的别名,因此a和b是同一个单元 注 ...

  6. 引用、数组引用与指针引用、内联函数inline、四种类型转换运算符

    一.引用 (1).引用是给一个变量起别名 定义引用的一般格式:类型  &引用名 = 变量名: 例如:int a=1;  int  &b=a;// b是a的别名,因此a和b是同一个单元 ...

  7. 特殊用途语言特性(默认实参/内联函数/constexpr函数/assert预处理宏/NDEBUG预处理变量)

    默认实参: 某些函数有这样一种形参,在函数的很多次调用中它们都被赋予一个相同的值,此时,我们把这个反复出现的值称为函数的默认实参.调用含有默认实参的函数时,可以包含该实参,也可以省略该实参. 需要特别 ...

  8. 位运算+引用+const+new/delete+内联函数、函数重载、函数缺省参数

    update 2014-05-17 一.位运算 应用: 1.判断某一位是否为1 2.只改变其中某一位,而保持其它位都不变 位运算操作: 1.& 按位与(双目): 将某变量中的某些位(与0位与) ...

  9. 堆(stack) 之 c 和 c++模板实现(空类默认成员函数 初谈引用 内联函数)

    //stack 的基本操作 #include <iostream> using namespace std; const int maxn = 3; typedef struct Stac ...

随机推荐

  1. printf("Hello 2018!");

    月考 has Boom! 要全心准备期末考试,到年前是不能再看Blog了 新年加油!!! 不要感冒 :joy:

  2. 利用redis自制幻灯片弹幕

    前段时间赶项目,忙结婚,各大技术平台都没时间上,不过还是抽出点时间为自己的婚礼做了一点小玩具,今天我就来给大家分享一下. 先来看一下效果 这个项目是基于微信个人订阅号的,订阅号的开发在此我就不再赘述了 ...

  3. java线程之线程通信控制

    在上篇我们看到,A线程往公共资源库(对象)提供了一条数据,然后B线程从库中提取了数据并打印出来. 实际项目中,我们不可能只往库中提供一条数据,而且库的大小也不会是无穷大的,那么我们就会有这样一 个需求 ...

  4. notepad++中双击选中字符串高亮颜色设置

    notepad++ 中最好用的功能就是双击选中,本文档中所有相同的内容高亮 不过有个问题就是当文档特别大,而且注释比较多的时候,我选中的内容高亮为绿色不太好找,那怎么设置呢? 设置--语言格式设置-- ...

  5. SOFA 源码分析 — 自定义线程池原理

    前言 在 SOFA-RPC 的官方介绍里,介绍了自定义线程池,可以为指定服务设置一个独立的业务线程池,和 SOFARPC 自身的业务线程池是隔离的.多个服务可以共用一个独立的线程池. API使用方式如 ...

  6. flume原理

    1. flume简介 flume 作为 cloudera 开发的实时日志收集系统,受到了业界的认可与广泛应用.Flume 初始的发行版本目前被统称为 Flume OG(original generat ...

  7. python logging method 02

    基本用法 下面的代码展示了logging最基本的用法.     1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 ...

  8. ELK 架构之 Elasticsearch 和 Kibana 安装配置

    阅读目录: 1. ELK Stack 简介 2. 环境准备 3. 安装 Elasticsearch 4. 安装 Kibana 5. Kibana 使用 6. Elasticsearch 命令 最近在开 ...

  9. 多进程IPC与Python支持

    多进程IPC与Python支持 linux下进程间通信的几种主要手段简介: 管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因 ...

  10. python+selenium实现登录账户

    selenium 是一套完整的web应用程序测试系统,包含了测试的录制(selenium IDE),编写及运行(Selenium Remote Control)和测试的并行处理(Selenium Gr ...