C++与C#在变量定义上的区别

来源:互联网 发布:百川二建考试软件 编辑:程序博客网 时间:2024/06/03 17:45

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#中的变量的定义就是多了,只要在内存上开辟空间的基本上就是了。

0 0