C++与C#在变量定义上的区别
2015-11-22 19:41
477 查看
C++和C#在变量(对象、指针在内存的角度上都是变量:都是内存块;)的定义的概念上不可能有什么区别:编译器为变量开辟空间。
但在形式上很不一样。
C++中:
A a;//定义a这个变量:告诉编译器这里有个A类型的变量并为它开辟A类型长度的内存空间;当然也叫初始化(栈区对象的初始化,区别于new)
这就是a的定义;
C#中:
A a;//告诉编译器这里有个A类型的变量a,我以后可能会用到它,你不用为它开辟内存空间(所以用户无法在这一行设置断点,因为不执行)
只是声明,不是定义;
For Example:
C++代码:
输出结果:
b的值以及内存空间情况如图:
C#代码:
输出结果(什么都没有):
此时b还是null
当然程序还涉及到构造顺序的问题不过不是这里要讨论的东西。总之,C++与C#中变量的定义在形式上是不同的(当然概念一致)。而C++中的变量的声明主要形式就是用extern关键字声明变量名而不定义它(不开辟空间),C#中的变量的定义就是多了,只要在内存上开辟空间的基本上就是了。
但在形式上很不一样。
C++中:
A a;//定义a这个变量:告诉编译器这里有个A类型的变量并为它开辟A类型长度的内存空间;当然也叫初始化(栈区对象的初始化,区别于new)
这就是a的定义;
C#中:
A a;//告诉编译器这里有个A类型的变量a,我以后可能会用到它,你不用为它开辟内存空间(所以用户无法在这一行设置断点,因为不执行)
只是声明,不是定义;
For Example:
C++代码:
#include <iostream> using namespace std; class A { public: A(); ~A(); private: }; A::A() { cout<<"A的内存空间被开辟!\n"; } A::~A() { cout<<"A的内存空间被销毁!\n"; } class B { public: B(); ~B(); private: A a; }; B::B() { cout<<"B的内存空间被开辟!\n"; } B::~B() { cout<<"B的内存空间被销毁!\n"; } int main(){ B b; return 0; }//请在此设置断点
输出结果:
b的值以及内存空间情况如图:
C#代码:
using System; namespace CShap其实只是声明_并不开辟内存空间 { class A { A() { Console.WriteLine("A的内存空间被开辟!"); } } class B { B() { Console.WriteLine("B的内存空间被开辟!"); } private A a; } class Program { static void Main(string[] args) { B b; } } }
输出结果(什么都没有):
此时b还是null
当然程序还涉及到构造顺序的问题不过不是这里要讨论的东西。总之,C++与C#中变量的定义在形式上是不同的(当然概念一致)。而C++中的变量的声明主要形式就是用extern关键字声明变量名而不定义它(不开辟空间),C#中的变量的定义就是多了,只要在内存上开辟空间的基本上就是了。
相关文章推荐
- 可变参数列表<stdarg.h>
- C语言之文件操作
- C语言关键字的使用注意事项
- C语言--单链表
- C++道格拉斯-普克 Douglas-Peuker(DP算法)
- VS2010中 C++创建DLL
- C++继承类型:公有、保护、私有、虚拟
- C++中无法解析的外部符号错误
- Python检查c语言源代码结构体是否对齐
- 012--VS2013 C++ 斜角景物地图贴图-位图
- 标准C++中的string类的用法总结
- c++ core Guidelines 翻译+读书笔记
- HDU 2612 Find a way(bfs)
- vs2008 C++ 没有找到MSVCR90D.dll 问题
- C++基础知识
- C/C++函数调用过程分析
- 【C++】栈处理后缀表达式
- C语言加密数据(xor加密)
- C语言中,头文件和源文件的关系(转)
- 两升序链表合并