当前位置: 首页 > news >正文

网站开发用户分析做网站电话销售说辞

网站开发用户分析,做网站电话销售说辞,建设通会员多少钱一个月,怎样营销能有效获取客户C入门——引用 一、引用的概念 引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。这就好比《水浒传》中,一百零八位好汉都有自己的绰号。通过&…

C++入门——引用

一、引用的概念

  • 引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。这就好比《水浒传》中,一百零八位好汉都有自己的绰号。
  • 通过&符号,我们可以实现对一个变量的引用。

1.使用规则

如图所示:
示例1

  • 在这里,我们先定义了一个变量a,int& b的意思就是给a取别名为b,因为a定义的是一个整型,因此是int&,如果a是浮点型,则取别名为double&,如果a为整型指针,那么取别名就应该写为int*&
  • 我们可以给同一个变量取多个别名,比如这里就是把a取别名为b,把b又取别名为c,其实,b和c都是a的别名,就像《水浒传》中一个好汉可能有好多个称呼,比如鲁智深,他在做和尚之前名为鲁达,作为提辖,人称鲁提辖;后来人们又叫他“花和尚”,一个道理。
  • 我们将a以及它的别名b,c的地址打印出来,不难发现都是指向同一块空间。

2.注意事项

  • 引用在定义时必须初始化,指针没有要求。如图所示:
    示例2
    示例3
  • 同理,我们也不能引用空指针。
  • 我们来看下面两段代码:
    示例4
    示例5
    在两段代码中,均初始化了两个变量int a=1int b=10;在第一段代码中,我们给变量a取别名为x,然后,我们让x=b。怎么理解这个x=b呢?我们先来运行一下,发现此时a和b都是10,说明a发生了变化。如果x=b意思是x刚才是a的别名,现在变成b的别名,那么a的值就不会发生变化;而事实恰恰相反,说明这里的=并不是改变引用的对象,而是一个赋值,将b的值拷贝给a的别名x,既然a的别名发生了变化,自然而然a也就发生了变化,因为a和x本来就是一个变量,就好比“豹子头”喝了酒就是林冲喝了酒,同样的意思。第二段代码就有所不同了,p作为一个指针,它指向的对象是可以改变的。因此我们可以总结出引用和指针的一个不同点:引用一旦引用一个实体,再不能引用其他实体,而指针可以任意改变指向的对象
  • 引用是编译器自己处理,指针需要显式解引用,
    让我们来感受一下:
    示例6
    示例7
    这是一个经典的交换两个数的函数,我们以前都是用的第一种方法,使用指针,但是在函数中需要写解引用;有了引用(取别名)操作后,我们在传参的时候也不需要传地址,直接传值即可,因为函数形参都是int&,是实参的别名,因此在函数里直接修改别名即可,更加方便。

二、引用作参数、返回值

1.引用作参数

示例7
上文提到的就是一个典型的例子,引用做参数,能够减少拷贝提高效率,尤其是大对象,深拷贝对象(以后会逐渐讲解),使用引用效率更高,我们举个例子:

#include <time.h>struct A 
{int a[100000];
};void TestFunc1(A a)
{;
}void TestFunc2(A& a)
{;
}void TestRefAndValue()
{A a;// 以值作为函数参数size_t begin1 = clock();for (size_t i = 0; i < 10000; ++i)TestFunc1(a);size_t end1 = clock();// 以引用作为函数参数size_t begin2 = clock();for (size_t i = 0; i < 10000; ++i)TestFunc2(a);size_t end2 = clock();// 分别计算两个函数运行结束后的时间cout << "TestFunc1(A)-time:" << end1 - begin1 << endl;cout << "TestFunc2(A&)-time:" << end2 - begin2 << endl;
}int main()
{TestRefAndValue();return 0;
}

运行结果如图:
示例8
很明显,传引用效率更高。

2.引用作返回值

  • 传值返回:示例9
  • 传引用返回:
    示例10
    这里返回的是n的引用
  • 引用作返回值,能够减少拷贝提高效率,尤其是大对象,深拷贝对象(以后会逐渐讲解),使用引用效率更高,我们举个例子:
#include <time.h>struct A
{ int a[10000];
};A a;
// 值返回
A TestFunc1()
{return a; 
}
// 引用返回
A& TestFunc2() 
{ return a; 
}void TestReturnByRefOrValue()
{// 以值作为函数的返回值类型size_t begin1 = clock();for (size_t i = 0; i < 100000; ++i)TestFunc1();size_t end1 = clock();// 以引用作为函数的返回值类型size_t begin2 = clock();for (size_t i = 0; i < 100000; ++i)TestFunc2();size_t end2 = clock();// 计算两个函数运算完成之后的时间cout << "TestFunc1 time:" << end1 - begin1 << endl;cout << "TestFunc2 time:" << end2 - begin2 << endl;
}int main()
{TestReturnByRefOrValue();return 0;
}

很明显,引用作返回值效率更高。

  • 基本所有的场合都可以用引用进行传参。
  • 需要注意的是,我们应当谨慎使用引用作为函数的返回值,如果出了函数的作用域,引用的对象不在了,就不能使用引用作返回,还在(比如static int a)就可以用引用返回。

三、引用的权限问题——常引用

1.引用过程中,权限不能放大

如图所示:
示例11
这里的a加了const,是不能被修改的,但是a的别名b没有加const,是可以被修改的,在引用(取别名)的过程中,a的权限被放大,因此产生报错,作如下修改即可:
示例12
这样一来,a和b都是不能被修改的,它们的权限相等。

2.引用的过程中,权限可以平移或缩小

  • 权限平移
    示例12
    上文的示例就是一个权限的平移,a和它的引用b都加上了const,都是不能被修改的。
  • 权限缩小
    如图所示:
    示例13
    如图所示,这里的a是可以被修改的,它的别名b是不可以被修改的,这就是权限的缩小,那么既然b不可以被修改,为什么a+1后b也+1了呢?我们打个比方,宋江让李逵下山办事,城里的人们都知道“黑旋风”的存在,因此宋江告诉李逵,下山后,人人都知道你是“黑旋风”,你不能喝酒,喝酒会误事,等你回来后,我们再慢慢喝。也就是说,李逵作为“黑旋风”时,不能喝酒,在这里就相当于a的别名b不能被修改;李逵上山后,宋江又允许他喝酒了,这里就相当于a+1,那么,既然李逵上山后喝了酒,“黑旋风”不就喝酒了吗,a+1就是b+1,只不过在只能以b的形式出面时,权限被约束罢了。

本期总结+下期预告

本期内容我们讨论了引用的相关知识,下期内容将为大家带来内联函数,auto关键字,基于范围的for循环等内容!

感谢大家的关注,我们下期再见!
在这里插入图片描述

http://www.yayakq.cn/news/396028/

相关文章:

  • wordpress怎么做小说站怎么样优化网站seo
  • 三合一网站建设系统平台公司是什么
  • 上海建站网站建设单页面企业网站
  • 织梦电影网站模板下载c 网站做微信支付功能
  • 网站后台添加关键词深圳洛可可设计公司
  • 新手如何做企业网站html做音乐网站
  • 商丘做网站线上网站制作
  • 公司网站公司网站办公软件公司排名
  • 谷歌企业网站seo太仓网站建设有限公司
  • 移动端网站设计欣赏网站设计素材免费下载
  • 建设律师推广网站网站链接维护怎么做
  • 如何在天气预报网站做引流最新互联网平台项目
  • wordpress模版哪个好网站建设优化建议
  • 网站关键字排名怎么做wordpress 如何修改主题宽度
  • 适合网站开发工程师的公司佛山网络公司排名前十
  • 网站开发需要哪些做缓网站
  • 厦门市城市建设档案馆的网站教学ppt模板免费下载完整版
  • 青岛网站制作推广重庆建设工程信息网官网平台
  • 如何建一个购物网站天津塘沽爆炸视频
  • 北京市朝阳区最新消息网站优化的文章
  • 深圳网站建设费用多少网站主办者
  • 宿州做网站的有吗装修公司资质查询官方网站
  • 凡科轻站opencart做网站视频
  • 校庆网站建设策划书范文wordpress建站被黑
  • 医院网站制作多少钱优府网站建设
  • 网络营销网站建设流程南涧县城乡建设局网站
  • 网站设计实例教程如何做自己的网站赚钱
  • 昆明网站建设公司猫咪科技亿藤互联网站建设开发
  • 备案不关闭网站怎么样龙江网站开发
  • 我想开个网站平台怎么开呢南皮 网站