C++托管扩展

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

缺点

优点

缺点



相关

  • 龙湖区23°22′29″N 116°42′43″E / 23.37472°N 116.71194°E / 23.37472; 116.71194坐标:23°22′29″N 116°42′43″E / 23.37472°N 116.71194°E / 23.37472; 116.71194龙
  • 北京宣武红旗业余大学北京宣武红旗业余大学,简称“红大”,位于北京市西城区右安门内大街79号,是北京市属成人高等学校。1958年6月,宣武区红旗夜大学创办,是北京市第一所区办成人高等学校,由廖沫沙确定
  • 渔翁岛西屿是澎湖群岛中的第二大岛,因为位于澎湖本岛的西边所以被称为“西屿”,西屿的别称为“渔翁岛”,是因为自古台湾海峡的渔产就极为丰富,有许多的渔船在西屿的西边海域进行作业,捕
  • 杰罗姆·罗宾斯杰罗姆·罗宾斯 (Jerome Robbins,1918年10月11日 – 1998年7月29日) 是一位美国戏剧制作人、导演、舞蹈指导,其成就主要在百老汇戏剧和芭蕾舞方面,此外,他也是影视导演和监制。
  • 俄罗斯边防军俄罗斯联邦边防军(Пограничные войска Росси́йской Федера́ции,缩写为ПВ)是俄罗斯联邦负责保卫国家边界的部队。它目前由俄罗斯联邦
  • 望江路街道望江路街道,是中华人民共和国四川省成都市武侯区下辖的一个乡镇级行政单位。望江路街道下辖以下地区:老马路社区、共和路社区、棕东社区、郭家桥社区、新生路社区和临江东路社
  • 擒凶记《擒凶记》(The Man Who Knew Too Much)是亚弗列德·希区柯克在1956年所执导的电影。由詹姆斯·斯图尔特、多丽丝·黛主演。这部影片是重拍希区柯克在1934年的同名电影,也是他
  • 相内沙英相内沙英(日语:相内 沙英,1996年7月15日-),日本女性配音员。出身于埼玉县。原ARTSVISION所属,日本播音演技研究所出身。高中在学期间,以深夜电视动画《归宅部活动记录》的要角大萩牡
  • 杰西卡·斯佐尔杰西卡·凯伦·斯佐尔(英语:Jessica Karen Szohr,1985年3月31日-),美国模特儿和电视女演员,拥有匈牙利及非裔美国人的血统。杰西卡演出由小说改编成的美国热门电视剧《绯闻女孩》中
  • 博尔哈·马约拉尔 博尔哈·马约拉尔·莫亚(西班牙语:Borja Mayoral Moya,1997年4月5日-),是一名西班牙的职业足球运动员,司职前锋,现时被西甲球会皇家马德里外借至意甲球会罗马。最后更新:2016年4月30日