C++托管扩展

✍ dations ◷ 2025-12-08 09:40: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++ 与其它编程语言在类似观念上的差异。

缺点

优点

缺点



相关

  • 重力重力(英语:gravitation/gravity),是指具有质量的物体之间相互吸引的作用,也是物体重量的来源。引力与电磁力、弱相互作用力及强相互作用力一起构成自然界的四大基本相互作用。在
  • 萨伏依王朝萨伏依王朝(意大利语:Casa Savoia),是欧洲的一个王朝,曾于1861年至1946年统治意大利。其建立者为拥有萨伏依、莱茵河以东及日内瓦湖南部地区的亨伯特一世(卒于1048年?)。中世纪时期,
  • 寄生植物寄生植物指的是其营养乃全部或部分于来自其他生物(其他植物)者。目前已发现营寄生的开花植物大约有19科,4,100种。寄生植物具特化的根,吸器(haustorium),会穿过宿主的组织达到木质
  • 美军亵渎古兰经事件美军亵渎古兰经事件,是发生于2005年的一系列美国军队人员亵渎《古兰经》的事件的总称,事件的曝光引发伊斯兰世界广泛的抗议,也招致世界对美国压制新闻自由的批评。据报道,事件发
  • 苏尼亚耶夫拉希德·阿利耶维奇·苏尼亚耶夫(俄语:Рашид Алиевич Сюняев,1943年3月1日-),俄国天体物理学家,鞑靼人,吸积盘理论的开拓者,并在1972年和雅可夫·泽尔多维奇一起提
  • 停车场停车场是供车辆停放之场所。停车场有仅画停车格而无人管理及收费的简易停车场,亦有配有出入栏口、泊车管理员及计时收款员的收费停车场。现代化的停车场常有自动化计时收费系
  • 议政王大臣会议议政王大臣会议(满语:ᡥᡝᠪᡝ ᡳᠠᠮᠪᠠᠨ,穆麟德:hebe i amban),或简称为议政处,是大清前期皇帝的一个咨询机构。议政王大臣会议源于努尔哈赤在十七世纪10年代和20年代初设立的
  • 怒苏语怒苏语是怒族使用的语言之一,属于藏缅语族彝语支,主要分布在云南省怒江傈僳族自治州的泸水、福贡等县。约有9000人使用。有3个方言。方言间通话困难。音节结构简单,以开音节为
  • 费迪南德·格奥尔格·弗罗贝尼乌斯费迪南德·格奥尔格·弗罗贝尼乌斯(Ferdinand Georg Frobenius,1849年10月26日-1917年8月3日)是德国数学家。他在微分方程理论和群论的成就是他最主要的贡献。弗罗贝尼乌斯生于
  • 金容云金容云(朝鲜语:김용운/金容雲 ,1927年9月6日-2020年5月30日),韩国数学史家,汉阳大学名誉教授,韩国数学文化研究所所长。1927年生于东京。1946年入早稻田大学,后回到全罗南道罗州的老