美文网首页
C++中引用的用法(一)

C++中引用的用法(一)

作者: 马谦马谦马谦 | 来源:发表于2017-12-04 23:07 被阅读0次

原文链接:C++中引用的基本用法

一、基本用法

创建一个对象的引用只需把声明符写成&val的形式即可:

int iVal = 1024;
int &refVal = iVal;

创建引用时,编译器并不是把拷贝一个值赋给引用,而是把引用和初始的对象绑定在一起,相当于只是给对象起了一个别名。可以通过引用来操作初始化对象,并且通过引用来操作对象时,相当于直接对对象进行了操作。

#include<iostream>
using namespace std;

int main() {
    int iVal = 1024;
    int &refVal = iVal;
    printf("%d %d\n", iVal, refVal);  // 1024 1024
    refVal += 1;
    printf("%d %d\n", iVal, refVal);  // 1025 1025
}

以引用作为函数的形参时,在函数内部改变形参的值,函数外部变量的值也会改变:

void add(int &x) {
    x += 1;
}

int main(){
    int iVal = 1024;
    add(iVal);
    printf("%d\n", iVal); // 1025
}

可以用引用给引用赋值,实际上就是把引用绑定的对象作为初始值:

int iVal = 10;
int &refVal = iVal, &refVal2 = refVal;  //refVal == refVal2 == 10

二、注意事项

1 引用必须初始化

因为引用只是和对象绑定在一起了,而不是拷贝值,一旦初始化完成,引用将永远和初始对象绑定在一起。所以引用在使用时必须初始化,并且引用不能重新赋值。

int iVal = 1, iVal2 = 2;
int &refVal = iVal;
int &refVal2;  //错
refVal = iVal2;  //错

2 不能使用引用的引用

引用本身不是一个对象,所以不能定义引用的引用

3 引用对象的类型必须匹配

引用对象的数据类型必须和初始化对象严格匹配。

int iVal = 1024;
double &x = iVal;  //错误

4 不能使用字面量初始化引用类型

引用类型的初始值必须是一个对象,不能为一个字面量。

int &refVal = 10;  //错误

相关文章

  • C++中引用的用法(一)

    原文链接:C++中引用的基本用法 一、基本用法 创建一个对象的引用只需把声明符写成&val的形式即可: 创建引用时...

  • 2017-03-14 C++阶段

    Task List 1. 回顾引用用法 2. 掌握c++中 new开辟空间的用法 3. 回顾数组指针以及const...

  • 每天一个知识点(十六)

    C++中引用&的用法 引用就是为某一个变量设置另一个名字。声明引用如下:类型 &应用名=变量名 例:int b i...

  • JNI基础 -- C++基础知识(命名空间)

    命名空间 因为在C++中没有包的概念,为了解决重名问题,就有了命名空间的概念,用法很简单: 引用和指针 引用更为规...

  • C语言到C++(3) - 引用

    今天要讲的是C++中我最喜欢的一个用法——引用,也叫别名。 引用就是给一个变量领取一个变量名,方便我们间接地使用这...

  • C++基础

    C++ 值传递、指针传递、引用传递详解C++中引用传递与指针传递区别 引用传递和指针传递的区别 引用的规则:(1)...

  • Reference 引用

    c++之 引用&参数传递 引用是C++中的概念,初学者容易把引用和指针混淆一起。 一下程序中,n是m的一个引用(r...

  • Kotlin学习笔记——基础语法篇之控制语句

    if...else... 用法 Kotlin中if...else...基本用法与C/C++,java中相同 例子 ...

  • java中的引用与c++中的指针的区别

    java中的引用与c++中的指针的区别 Java的引用和C++的指针都是指向一块内存地址的,通过引用或指针来完成对...

  • C++中的引用和指针

    C++ 引用与指针的比较 引用是 C++ 中的概念,初学者容易把引用和指针混淆一起。 以下程序中,n 是m的一个引...

网友评论

      本文标题:C++中引用的用法(一)

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