标签:
这些天学习C#,看到里面的值类型与引用类型,例如结构是值类型,类是引用类型,然后立马想到了C++中的类,那么C++中的类是什么类型呢,哈哈,忽然间有点迷惑,上网搜了搜还真有很多小伙伴们已经晕进去了,今天就总结一下C#与C++中值类型与引用类型的区别。
其实C#中值类型与引用类型的根本区别就是变量包含的数据在哪个内存区间上,值类型在堆栈中直接包含,引用类型在堆中间接引用,例如,C#中实例化类必需要下面的语法:
Class name = newclass();
很容易看出来,类是在堆中分配的空间,然后让name指向的分配空间。
那么C++中有没有值类型与引用类型呢,学过C++的都知道,C++中没有专门区分出值类型与引用类型,C++中的引用类型也和C#中的引用类型不同,C++中的引用类型是说给一个变量起别名,无论这个变量是在哪个内存区域中,例如以下两个引用方式:
一、
Int b = 12;
Int* a = &b;
Int* &c = a;
二、
Int* b = newint;
Int* & a =b;
从上面可以看出,C++中的引用其实就是对一个变量起的一个别名,引用的内部实现方式其实也是通过指针实现的。但是C#中引用类型的变量存储对其数据(对象)的引用,而值类型的变量直接包含其数据。差别还是很大的。
那么C++中的类相当于是C#中的什么类型呢,我们可以看看C++中的类是分配在哪个内存区域中,请看以下两种声明类的方式:
第一种直接声明,类分配在堆栈中:
ClassA{};
Aa;
第二种通过new分配内存,类分配在堆中:
ClassA{};
A*a = new A();
通过以上两种方式我们也差不多可以分辨出来C++中相对于C#中值类型与引用类型的区别了,第一种类的声明方式是把类声明在堆栈中,其实也就是对应的C#中的值类型,第二种累的声明方式是把类声明在堆中,其实也就是对应的C#中的引用类型。
随手一写,希望给同样初学的小伙伴们一些提示,哪里有错误希望大家指出来,谢谢。
标签:
原文地址:http://blog.csdn.net/linukey/article/details/43927037