`

关于C++引用类型一点认识

    博客分类:
  • C++
阅读更多

引用类型可以和指针一样指向某个变量,但两者在使用的时候还是有许多区别,

 

1.声明一个引用类型后,一定要给他赋值,否则编译通不过,特别是在类中,如果有引用成员变量时,一定要在构造函数的初始化列表中初始化,例如:

class foo

{

public:

foo(){}

private:

int& var;

};

foo f; // Error, 没有初始化引用变量var

 

2.引用类型在使用时有一定的限制,函数不能返回一个临时变量的引用,例如:

//Error

int& foo(int a, int b)

{

int c;

c = a + b;

return c;

}

变量c是临时变量,返回c的引用可能会引起严重错误

 

3.引用类型适用于函数传递参数,这是非常方便的,避免了复制拷贝,但要注意的是,传递的参数必须是变量,而不能是数值常量,例如:

int foo(int& a, int& b)

{

return a+b;

}

//

int a =0, b=1, c=2;

char d='d';

a = foo(b, c); //OK

a = foo(b, (int)d); //Error

a = foo(1, 2); //Error

 

4.引用变量一旦指向某个变量后,就不能再改变它所指向的引用,只能改变指向变量的值,因此如果需要动态改变它所指向的变量,那么引用类型就不适用了,那就该用指针,例如:

int a =10;

int& ref = a;

a = 20; // ref=20

ref = 30; // a=30



分享到:
评论

相关推荐

    C C++ 范例开发大全 本书源程序

    C++提供了fstream库来实现这一点。 9. **预处理器**:C++的预处理器可以进行宏定义、条件编译等操作,虽然在某些情况下应谨慎使用,但理解其功能可以帮助编写特定环境下的代码。 10. **调试技巧**:掌握GDB等调试...

    Effective C++, 3rd Edition

    这一章主要是为了让读者对C++有一个全面的认识,并且学会如何正确地使用这门语言。 - **Item1: 将C++视为多种语言的联合** - C++不仅仅是一种语言,而是由多个子集组成的一个语言联邦。它包含了C风格的语言特性、...

    高质量C++ C编码规范

    - 指针参数传递的是内存地址,理解这一点对于正确使用指针至关重要。 **7.5 FREE和DELETE把指针怎么啦** - `free`和`delete`用于释放内存,但它们之间存在差异,了解这些差异有助于正确地管理内存。 **7.6 动态...

    C++MFC教程

    对于已经掌握了VC的朋友:这种程度的开发者应该加深自己对系统原理,技术要点的认识。需要选择一些对原理讲解的比较透彻的书籍,这样一来才会对新技术有更多的了解,最好书中对技术的应用有一定的阐述。尽量选择...

    初步认识java教程

    这一点是Java为了提高安全性和减少错误而做的重大改变。相比之下,C/C++允许使用指针,但这也可能导致诸如野指针和悬挂指针等问题。 **2. 多重继承** C++支持多重继承,即一个类可以从多个父类继承特性。然而,多重...

    C++虚函数的陷阱

    C++的虚函数支持动态绑定,也就是说,调用哪个版本的虚函数取决于运行时的对象类型,而不是编译时的指针类型。然而,对于默认参数,情况有所不同。默认参数是在编译时确定的,而不是在运行时。这意味着调用`p->fun()...

    COM技术初探(pdf格式)

    A 我对dll的一点认识 一. 没有lib的dll 1.1 建一个没有lib的dll 1.2 调试没有lib的dll 二. 带有lib的dll 2.1 创建一个带有lib的dll 2.2 调试带有引用但没有头文件的dll 三. 带有头文件的dll 3.1 创建一个带有引出...

    C++ 中类的拷贝、赋值、销毁的实例详解

    在定义拷贝赋值运算符时,我们需要注意的是,返回值一定是引用类型,这是因为我们可以进行链式编程而做的,如 `s1 = s2 = s3`。 三、类的析构函数 类的析构函数是用于销毁类的实例对象的,它们负责释放类的资源,...

    VC++6 编写静态链接库和调用静态链接库源码下载

    理解指针的工作原理,包括指针的声明、初始化、解引用以及指针运算,是C++编程的基础。 在这个源码下载中,你将有机会实践以上概念,通过实际操作加深理解。stringlib可能是一个包含字符串处理函数的静态库,你可以...

    深入学习 JavaScript中的函数调用

    在编写代码时,对于基本数据类型和引用数据类型应采用不同的处理策略,尤其是在涉及到对象和数组这类引用类型时,更要注意区分修改引用和修改对象属性之间的区别。这样能够帮助我们写出更健壮、更不容易出错的...

    C#微软培训资料

    18.2 在 C #代码中调用 C++和 VB 编写的组件 .240 18.3 版 本 控 制 .249 18.4 代 码 优 化 .252 18.5 小 结 .254 第五部分 附 录 .255 附录 A 关 键 字.255 附录 B 错 误 码.256 附录 C .Net 名字空间...

    c#学习笔记.txt

    结构是值类型,而类是引用类型。 2, 装箱和拆箱(取消装箱) 装箱是值类型到 object 类型或到该值类型所实现的任何接口类型的隐式转换。将一个值的值装箱会分配一个对象实例并将该值复制到新的对象中。关键字 object. ...

    cap_save.rar_捕获网卡

    这个文件可能包含了关于如何使用`cap_save.cpp`的详细步骤、示例或者库的引用和API文档。 `zxs.txt`文件没有明确的上下文,但可能包含作者的注释、日志信息、使用案例或其他辅助信息。如果`cap_save.cpp`是一个由...

    初学js者对javascript面向对象的认识分析

    多态性意味着可以使用父类型的指针或引用来指向子类型的对象,并且能够调用子类中重写的父类方法。 JavaScript中的函数也是对象,因此可以被赋值给变量,作为参数传递,或者作为对象的属性存储。这一点为函数式编程...

    Java 语言基础 —— 非常符合中国人习惯的Java基础教程手册

    然 new 运算符返回对一个对象的引用,但与 C、C++中的指针不同,对象的引用是指 向一个中间的数据结构,它存储有关数据类型的信息以及当前对象所在的堆的地址, 而对于对象所在的实际的内存地址是不可操作的,这就保证...

Global site tag (gtag.js) - Google Analytics