C++托管扩展

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

缺点

优点

缺点



相关

  • 九州地区坐标:33°N 131°E / 33°N 131°E / 33; 131九州(日语:九州/きゅうしゅう Kyūshū */?, 发音 帮助·信息)是日本西南部的一个岛,为日本本土四大岛之一,也是日本的第三大岛、世
  • Sony Ericsson W580iSony Ericsson W580i为Sony Ericsson于2007年7月31日所推出的移动电话,内建200万画素相机。内建了Shake Control摇动换曲功能,在播放音乐时只要左右摇晃便能控制。除了独创的S
  • 陈端堂陈端堂(1920年7月23日-2005年9月28日),医师、政治人物,毕业于日本大阪帝国大学医学部,曾担任省立台中医院外科主任、颖川外科医院院长,1973年至1977年出任台中市市长。中国国民党籍
  • 多数投票算法博耶-摩尔多数投票算法(英语:Boyer–Moore majority vote algorithm),中文常作多数投票算法、摩尔投票算法等,是一种用来寻找一组元素中占多数元素的常数空间级时间复杂度算法。
  • 延长高速公路延吉—长春高速公路,简称延长高速,是一条中国国家高速公路,编号G1221。起点在吉林省延边朝鲜族自治州延吉市八道村与珲乌高速连接,终点在吉林省长春市。2011年,《汪清至大蒲柴河
  • 路易吉·阿里西奥路易吉·阿里西奥(意大利语:Luigi Arisio,1926年3月25日-2020年9月29日),意大利政治人物,前众议院议员。1926年生于都灵。父亲是技术工人,母亲是家庭主妇。1940年代,他在蓝旗亚做学徒,后在菲亚特汽车公司工作。到1970年代末,他已经升任米拉菲奥里工厂部门主任,管理250余名下属。1980年9月,菲亚特首席执行官切萨莱·罗米蒂宣布集体裁员2万余人,这引发了工会的不满。路易吉·阿里西奥参与并领导了10月14日的示威游行,约有4万人参加了这场活动。在1983年的大选中,他代表意大利
  • 河田聪河田聪(1951年10月1日-)是出生于大阪府池田市的应用物理学学者。大阪大学研究院的教授,理化学研究所的主任研究员。专门研究纳米光学(Nano-optics)。
  • 汉斯·贝里隆德汉斯·贝里隆德(瑞典语:Hans Berglund,1918年2月24日-2006年9月17日),瑞典男子皮划艇运动员。他曾代表瑞典参加1948年夏季奥林匹克运动会皮划艇比赛,获得男子双人皮艇1000米金牌。
  • 萨比诺·毕尔巴鄂萨比诺·毕尔巴鄂(西班牙语:Sabino Bilbao,1897年12月11日-1983年1月20日),西班牙男子足球运动员,司职中场。他曾代表西班牙国家队参加1920年夏季奥林匹克运动会足球比赛,获得一枚银牌。
  • 伊崇额宜崇(1792年-1857年),榜名伊崇额,字景姚,号升庵,满洲镶红旗人,嘉庆丙子科举人,己卯科进士。道光年间由主事升福建道监察御史,后因事于道光二十三年革职;咸丰六年授翰林院侍讲学士;七年授詹事、日讲起居注官、大理寺卿。