您的位置:首页 > 编程语言 > C语言/C++

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++代码:

#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#中的变量的定义就是多了,只要在内存上开辟空间的基本上就是了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++vsC#