C++ : 内联函数和引用变量
一.内联函数
内联函数和普通函数的使用方法没有本质区别,我们来看一个例子,下面展示了内联函数的使用方法:
#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++ : 内联函数和引用变量的更多相关文章
- C++命名空间、函数重载、缺省参数、内联函数、引用
一 .C++入门 1.C++关键字 2.命名空间 3.C++输入&输出 4.缺省参数 5.函数重载 6.引用 7.内联函数 8.auto关键字 9.基于范围的for循环 10.指针空值null ...
- C++学习笔记之——内联函数,引用
本文为原创作品,转载请注明出处 欢迎关注我的博客:http://blog.csdn.net/hit2015spring和http://www.cnblogs.com/xujianqing/ 作者:晨凫 ...
- 重构改善既有代码设计--重构手法02:Inline Method (内联函数)& 03: Inline Temp(内联临时变量)
Inline Method (内联函数) 一个函数调用的本体与名称同样清楚易懂.在函数调用点插入函数体,然后移除该函数. int GetRating() { return MoreThanfiveLa ...
- C++ primer(八)--内联函数 引用变量 引用传递函数参数 函数重载/模板/模板具体化
一.内联函数 常规函数和内联函数的区别在于C++编译器如何将他们组合到程序中.编译过程的最终产品是可执行程序--由一组机器语言指令组成.运行程序时,操作系统将这些指令载入到计算机内存中,因此每 ...
- 从零开始学C++之从C到C++(二):引用、内联函数inline、四种类型转换运算符
一.引用 (1).引用是给一个变量起别名 定义引用的一般格式:类型 &引用名 = 变量名: 例如:int a=1; int &b=a;// b是a的别名,因此a和b是同一个单元 注 ...
- 引用、数组引用与指针引用、内联函数inline、四种类型转换运算符
一.引用 (1).引用是给一个变量起别名 定义引用的一般格式:类型 &引用名 = 变量名: 例如:int a=1; int &b=a;// b是a的别名,因此a和b是同一个单元 ...
- 特殊用途语言特性(默认实参/内联函数/constexpr函数/assert预处理宏/NDEBUG预处理变量)
默认实参: 某些函数有这样一种形参,在函数的很多次调用中它们都被赋予一个相同的值,此时,我们把这个反复出现的值称为函数的默认实参.调用含有默认实参的函数时,可以包含该实参,也可以省略该实参. 需要特别 ...
- 位运算+引用+const+new/delete+内联函数、函数重载、函数缺省参数
update 2014-05-17 一.位运算 应用: 1.判断某一位是否为1 2.只改变其中某一位,而保持其它位都不变 位运算操作: 1.& 按位与(双目): 将某变量中的某些位(与0位与) ...
- 堆(stack) 之 c 和 c++模板实现(空类默认成员函数 初谈引用 内联函数)
//stack 的基本操作 #include <iostream> using namespace std; const int maxn = 3; typedef struct Stac ...
随机推荐
- Manacher算法解析
Manacher算法 Manachar算法主要是处理字符串中关于回文串的问题的,它可以在 O(n) 的时间处理出以字符串中每一个字符为中心的回文串半径,由于将原字符串处理成两倍长度的新串,在每两个字符 ...
- Surface pro 4 使用心得
今天谈谈这几个月Surface pro 4的使用心得.这篇后面有点跑题,行文也比较随意,就当闲笔了. 设备简述 使用体验 优点 不足 优雅使用 系统界面 应用 系统应用 工具应用 生产工具 其他应用 ...
- ubuntu 命令整合1
一.linux命令基本格式 命令名[选项] [参数] 注意: 命令名区分字母大小写 命令名必须有 选项.参数可以没有,选项一般使用减号开头二.具体Linux命令 1.who 显示登录系统中的用户的信息 ...
- 图灵程序设计丛书(SQL必知必会)笔记
SQL必知必会 第二课:检索数据 1.分页 (1).SQL Server 栗子 : select top 2 columns from tableName (2).Oracle 栗子 :select ...
- PHP后端之验证码
PHP后端之验证码 前言: 打算写一些实际开发中遇到的东西.我这个人记性不好,觉得记下来,以后就算想找,也能找得到. PHP,可能很长一段时间都不会使用了.所以还是留一些记录. 另外还有一些服务器架设 ...
- 一个能拖动,能调整大小,能更新bind值的vue指令-vuedragx
一. 背景说明 开发一个可自定义组件化门户配置页面,期间采用了vue框架作为前端视图引擎,作为一个刚入手vue的萌新,开发第一个功能就遇到了拦路虎.需要一个拖动并且可改变大小的容器盒子.当时查看vue ...
- PAT1118:Birds in Forest
1118. Birds in Forest (25) 时间限制 150 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Some ...
- mac下的readelf和objdump
ELF文件包括: (1)可重定位的目标文件 (2)可执行的目标文件 (3)可被共享的目标文件 可以用file命令来看目标文件是否是ELF文件 在linux下,用readelf来看ELF头部或者其它各s ...
- springcloud禁用动注册正在运行的服务
@EnableDiscoveryClient(autoRegister=false)或者在配置文件里spring.cloud.service-registry.auto-registration.en ...
- RBAC权限模型——项目实战(转)
一.前言 权限一句话来理解就是对资源的控制,对web应用来说就是对url的控制,关于权限可以毫不客气的说几乎每个系统都会包含,只不过不同系统关于权限的应用复杂程序不一样而已,现在我们在用的权限模型基本 ...