C++托管扩展

✍ dations ◷ 2025-12-10 10:32:58 #C++托管扩展

C++托管扩展(Managed Extensions for C++)是对C++的一个属性和关键字的扩展,以便于在微软公司的.NET Framework进行编程。它也经常被称为托管C++。2002年由微软发布。

托管C++并非独立存在的编程语言,而仅仅是微软对C++的一个语法扩展,允许C++程序员在.NET框架和CLR的基础上进行托管编程。与C#和Visual Basic .NET相比,其主要优点是旧代码可以比较快地移植到新的平台上,而且即使不完全重写代码,也可以通过互操作在同一个模块中无缝集成托管和非托管代码,从新的.Net框架中获益。

.Net框架封装了大量的API,例如网络访问、字符串操作、数据访问、XML服务、图形界面控件库、邮件服务、加密服务、文件输入/输出,甚至是WMI管理,也使得应用程序员可以编写更加简洁的代码。目前只有托管C++及其后继者C++/CLI可以做到无缝集成托管和非托管代码,而在托管代码中调用COM的速度又相当慢,所以经常被用于其他语言和非托管代码之间的桥梁。

托管C++允许程序员编写托管代码,内存管理的工作现在可以让CLR去自动处理,访问时也增加了类型检查,减少了缓冲区溢出和内存泄漏的危险,增加了程序的稳定性,但是在性能敏感的应用中,庞大的.NET框架和缓慢的自动内存管理并不是必要的,传统非托管代码仍然是一些人的首选。

在面向对象编程方面,主要的变化是对多重继承的限制,这是因为CLR的限制和内存管理的需要。一个托管类不能多继承基类。同时,类属性和微软中间语言(MSIL)的引入也使得托管类可以在其他语言中使用和继承。

与此同时,托管C++引入了大量的关键字和语义转换,减少了代码的可读性和明确性。缺少在很多语言中都支持的泛型和for each语句也增加了其他语言的程序员转向托管C++的困难。在其后继者C++/CLI中泛型和for each语句才被支持。

以下列出面向对象编程与 unmanaged C++ 之间的差异性。

//hello.cpp//new using directive#using <mscorlib.dll>//another using namespace directive.using namespace System;int main()  {  Console::WriteLine("Hello");  return 0;}

一个新的前置处理引导(preprocessor directive)

   #using <mscorlib.dll>

这是必须的。此外 #using directives 必须用 namespace 的方法来 import 更多的库(libraries),像是 Base Class Library,例如:

  #using <System.Windows.Forms.dll>

以及

  using namespace System::Windows::Forms;

来使用 Windows Forms。

   cl.exe hello.cpp /clr

/clr enables any code referencing the .NET Framework to be compiled as CIL。

//gc.cpp#using <mscorlib.dll>__gc class gc  {  int* i;  char* g;  float* j;};int main()  {  while(true)  {    gc* _gc = new gc();  }  return 0;}

比较 Managed C++

以下列出 Managed C++ 与其它编程语言在类似观念上的差异。

缺点

优点

缺点



相关

  • 政治化政治化,是一个人类社会中的多元问题,任何参与者基于人权,能以社会热门话题及社会问题等作切入点,向管治权力施压,以取得政府关注及回应。例如政客、政党等,会利用很多社会、经济、
  • 车轮轮是以圆形的物体造成大为减少磨擦。如果配上轴,即成为车的最主要构成部分。轮在交通运输中非常有用,是人类的重要发明之一。除了车轮以外,其他圆形的轮还有舵轮(英语:Ship's whe
  • 慕尼黑慕尼黑(德语:München .mw-parser-output .IPA{font-family:"Charis SIL","Doulos SIL","Linux Libertine","Segoe UI","Lucida Sans Unicode","Code2000","Gentium","Gentium
  • 闰年闰年是公历中的名词。闰年分为普通闰年和世纪闰年。 普通闰年:公历年份是4的倍数的,且不是100的倍数,为闰年。(如2004年就是闰年); 世纪闰年:公历年份是整百数的,必须是400的倍数
  • 单速车单速车,区分为2种 Single speed, Fixed Gear,后者又称固定齿轮自行车、“死飞车”,是一种没有飞轮的自行车,车轮与脚踏板永远处于联动状态,链轮齿与轮毂是紧紧咬合的,只要后轮旋转
  • 魏仕贤魏仕贤(1531年-?年),字用可,四川重庆卫官籍,明朝政治人物。隆庆二年(1568年)戊辰科第三甲第七十三名进士。曾任巴陵县知县,万历七年(1579年)升广西梧州府知府。曾祖魏勋,祖魏武,父魏昆,母曹
  • 格尔代利察列车轰炸事件过程余波其他方面格尔代利察列车轰炸事件是指1999年4月12日,由美军发射的两枚导弹击中南联盟格尔代利察一列正通过南摩拉瓦河铁路桥的旅客列车的事件,是科索沃战争期间北约对
  • 也门世界遗产名录由于文化遗产和自然遗产越来越受到破坏威胁,联合国教科文组织大会于1972年10月17日至11月21日在巴黎举行第十七届会议,并于11月16日在法国巴黎通过《保护世界文化和自然遗产公
  • 阿森车站阿森车站(荷兰语:Station Assen)是荷兰德伦特省首府阿森的主要铁路车站,位于梅珀尔-格罗宁根铁路上,于1870年5月1日启用。1989年建造的车站建筑于2016年2月被拆除,由一幢临时站取代。新车站大楼的建设于2017年开始,于2018年5月14日启用,全数的工程于2018年11月完成。
  • 阿图尔·约纳特阿图尔·约纳特(德语:Arthur Jonath,1909年9月9日-1963年4月14日),德国男子田径运动员,主攻短跑。他曾代表德国参加1932年夏季奥林匹克运动会田径比赛,获得一枚银牌和一枚铜牌。