C++引用

作者: 不惜留恋_ | 来源:发表于2020-05-12 16:40 被阅读0次

什么是引用

引用其实就是变量的别名,在C++中,它主要用作函数形参,于是函数可以修改传入参数的原始数据,而不在是数据的副本。

引用与指针

如果函数参数声明为指针,其实也可以操作原始数据,如下

#include <iostream>
  
struct Person
{
    std::string name;
};


void changeName(Person & person)
{
    // 因为引用是变量的别名,因此可以使用点号来访问结构变量
    person.name = "David";
}

void changeName1(Person * person)
{
    person->name = "Frank";
}

int main()
{
    Person p = {"Unknown"};
    changeName(p);
    std::cout << "After changeName: name = " << p.name << std::endl;

    changeName1(&p);
    std::cout << "After changeName1: name = " << p.name << std::endl;
    return 0;
}

可以发现使用引用参数,在调用的时候方便一些,直接传入变量名即可,而不用传入变量的地址。这也是C++对C指针改进的一个地方。

引用参数的注意事项

声明引用参数时,只有一个注意事项: 如果没有绝对的理由需要修改原始数据,那么就将引用参数设置为 const 。

否则可能会触发一些编译问题(例如传入变量类型不匹配,导致编译不过)或使用问题(例如无意间修改了原始数据)。

将引用用于函数返回类型

如果函数返回一个引用类型的变量,要注意不要将返回的引用变量指向不存在的内存

Person & changeName(Person & p)
{
    Person temp;
    p.name = "David"; // 修改原始数据
    temp  = p; // 拷贝信息
    return temp;
}

temp 变量的内存在函数结束后,会被释放,因此返回 temp 变量的引用将会指向一个无效内存,这将导致编译错误。

如果函数必须返回一个引用类型的变量,可以将传入的引用参数返回

Person & changeName(Person & p)
{
    p.name = "david";
    // 返回引用参数,安全
    return p;
}

什么时候使用引用

指针和引用都有两个作用

  1. 可以修改原始数据。
  2. 引用参数或指针参数,可以提高程序的运行速度。因为它们都不执行数据复制操作。

那么什么使用引用参数,什么时候使用指针?

一个原则: 在C++中,如果函数要修改参数的原始数据,就使用引用。

相关文章

网友评论

      本文标题:C++引用

      本文链接:https://www.haomeiwen.com/subject/dsobnhtx.html