所在的位置: C++ >> C++前景 >> C引用

C引用

补骨脂白斑抑菌凝露 https://m.39.net/pf/a_11092337.html

1.引用

1.1引用概念

引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。

类型引用变量名(对象名)=引用实体;

注意:引用类型必须和引用实体是同种类型的

1.2引用特性

1.引用在定义时必须初始化

2.一个变量可以有多个引用

3.引用一旦引用一个实体,再不能引用其他实体

1.3常引用

上面提到,引用类型必须和引用实体是同种类型的。但是仅仅是同种类型,还不能保证能够引用成功,我们若用一个普通引用类型去引用其对应的类型,但该类型被const所修饰,那么引用将不会成功。

我们可以将被const修饰了的类型理解为安全的类型,因为其不能被修改。我们若将一个安全的类型交给一个不安全的类型(可被修改),那么将不会成功。

1.4使用场景

1.做参数

2.做返回值

下面代码输出什么结果?为什么?

注意:如果函数返回时,出了函数作用域,如果返回对象还未还给系统,则可以使用引用返回,如果已经还给系统了,则必须使用传值返回。

1.5传值、传引用效率比较

以值作为参数或者返回值类型,在传参和返回期间,函数不会直接传递实参或者将变量本身直接返回,而是传递实参或者返回变量的一份临时的拷贝,因此用值作为参数或者返回值类型,效率是非常低下的,尤其是当参数或者返回值类型非常大时,效率就更低。

值和引用的作为返回值类型的性能比较

#includetime.h

structA{inta[];};

Aa;

//值返回

ATestFunc1(){returna;}

//引用返回

ATestFunc2(){returna;}

voidTestReturnByRefOrValue()

{

  //以值作为函数的返回值类型

  size_tbegin1=clock();

  for(size_ti=0;i0;++i)

    TestFunc1();

  size_tend1=clock();

  //以引用作为函数的返回值类型

  size_tbegin2=clock();

  for(size_ti=0;i0;++i)

    TestFunc2();

  size_tend2=clock();

  //计算两个函数运算完成之后的时间

  cout"TestFunc1time:"end1-begin1endl;

  cout"TestFunc2time:"end2-begin2endl;

}

通过上述代码的比较,发现传值和指针在作为传参以及返回值类型上效率相差很大。

1.6引用和指针的区别

在语法概念上引用就是一个别名,没有独立空间,和其引用实体共用同一块空间。

在底层实现上实际是有空间的,因为引用是按照指针方式来实现的。




转载请注明:http://www.aierlanlan.com/cyrz/6083.html

  • 上一篇文章:
  •   
  • 下一篇文章: