C++下的引用类型
来源:互联网 发布:极限挑战跑男感情知乎 编辑:程序博客网 时间:2024/06/16 23:31
引用类型也称别名,它是个很有趣的东西。在c++ 下你可以把它看作是另外的一种指针,通过引用类型我们同样也可以间接的操作对象,引用类型主要是用在函数的形式参数上,通常我们使用它是把类对象传递给一个函数。
引用对象采用类型名加上&符号和名称的方式进行定义。例如:(int &test;),这里我们就定义了一个int类型的名为test 的引用,但是int &test;这样的方式是不能够被编译成功的,因为引用的定义必须同时给应用进行赋值操作,这里的赋值并不是说把变量的值传递给引用,而是把引用指向变量,写成这样就对了:(int &test=变量名;)。
#include <iostream>
using namespace std;
void main(void)
{
int a=10;
int &test=a;
test=test+2;
cout << &a << "|" << &test << "|" << a << "|" <<test << endl;
cin.get();
}
观察并编译运行上面的代码你会发现&a和&test的地址显示是相同的,a和test的值显示也是一样的!
const修饰如果用在引用上会有一个特别之处,它的奥妙就在于可以进行不同类型的对象的初始化,而这一切在普通变量操作上是不可能的下面我们来看一个例子:
#include <iostream>
using namespace std;
void main(void)
{
int a=10;
//double &test = a + 1.2f; //这句就是错误的!
const double &test = a + 1.2f;
cout << &a << "|" << &test << "|" << a << "|" <<test << endl;
cin.get();
}
上面的代码足够说明问题了,这就是const修饰带来的好处,但是聪明的人会在输出的时候发现一个问题,就是a和test的值的输出不同,按照最先说的道理应该可以改变a的值呀,为什么在这里却有没有能够改变呢?
道理是这样的,const修饰过后的引用在编译器内部是这样进行变化的。
int a=10;
const double &test = a + 1.2f;
这样的一段代码在编译器认为却是下面的方式进行的
int a=10;
int temp = a;
const double &test = temp + 12.f
这里其实是把a的值赋给了一个临时temp 变量,而后test获得的却是temp+12.f 改变的是temp而不是a,所以就出现了a和test显示的值不同的情况,这里要特别注意,这是一个很容易混淆的地方,在编写程序的时候要特别仔细,以免出现了问题却检查不出为什么!
- C++下的引用类型
- C++下的引用类型
- C#string 的引用类型问题
- C++_引用类型
- C#_引用类型
- [C#] 值类型与引用类型的区别?
- [C#] 值类型与引用类型的区别?
- c++引用类型和指针类型的区别
- 值类型与引用类型的区别(基于C#)
- c++下引用类型
- 值类型与引用类型下的输入实例对比
- C++/CLI中的引用类型
- 【引用】C中的类型转换
- 【C#】List列表的深复制,引用类型深复制
- 返回引用类型的函数指针(c++)
- C# 值类型与引用类型
- 【C#】值类型和引用类型
- 值类型与引用类型(C#)
- Java中四种操作xml方式的比较(转贴)
- C/C++中枚举类型(enum)
- Symbian开发 配置篇
- C++中布尔类型
- 微软iq测试题
- C++下的引用类型
- C++中的const限定修饰符
- 如何拉到大客户
- 这两天一夜,做了一些代码和库,为了干掉cnnic 3721的保护,就象icesword那样
- 参加UML培训随感
- 编程&硬件知识
- 不管懂不懂经济,看了都会豁然开朗 (转)
- 可变大小的对话框的研究
- APS.NET身份验证概念