2-1 复合类型 引用

1 引用

  • 不真实存在
  • 不可以绑定临时值,可以绑定常量
  • 引用必须初始化

2 基本属性

引用通俗理解就是相当于实现了一个绑定,它并不是真是存在的。引用通常用于传递参数,只需要传一个引用进去,而不是拷贝进去,引用的方式相对节省操作时间。以下面程序为例简单介绍引用:

int main() {
    int local_price=12;
    int &replace_price=local_price;
    cout<<&local_price<<endl;
    cout<<&replace_price<<endl;
    for(int i=0;i<4;i++){
        local_price=i;
        cout<<replace_price<<endl;
    }
    return 0;
}

得到的输出结果为

0x11a3dff79c
0x11a3dff79c
0
1
2
3

可以看到二者在内存中的地址是一样的,也就是说引用不真实存在。在接下来的循环中可以发现对local_price赋的值同样赋给了replace_price,即所谓的“引用实现了绑定的效果”

3 注意事项

在使用引用时要注意它不能够绑定没有真实内存的量,比如

string & a="hello";
int b=16;

这些都是错误的写法,无法绑定,编译器不会帮你去绑定这样一个临时的值,它会认为没有必要,如果你需要改变这样一个临时的值,那为什么不用一个变量把它存下来。

但是它是可以绑定常量的,比如:

const int &b=16;

这一步是因为编译器在看到const后帮我们进行了如下操作:

const int temp=16;
b=temp;

除了不可以绑定临时值以外,还需要注意的一点是引用必须初始化,如果只是做了声明,那么编译器会报错,这也是和指针的一个区别。

4 引用作为函数参数

按引用传递允许被调用的函数能够访问并改变调用函数中的变量,如果我们试图让函数使用传递给它的信息,而不对这些信息进行修改,那么就需要使用常量引用。

void function(int &a);
void function(const int &a);//常量引用

要注意的一点是,通常我们在传递基本类型参数时,应采用按值传递,不建议使用引用的方式。如果我们不加const,会导致被调用函数在我们不知情的状况下改变原来的值。只有当数据比较大的时候(类或者结构体),引用参数才会变得很有用。并且加或不加const取决于我们使用这个函数的目的。

posted @ 2023-03-10 00:08  白日梦想家-c  阅读(14)  评论(0编辑  收藏  举报