C++托管扩展

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

缺点

优点

缺点



相关

  • 翼状胬肉手术翼状胬肉手术或翼状胬肉切除术是针对翼状胬肉做的手术。以单纯切除术为例:转头术为将翼状胬肉头部缝合在结膜下。干细胞移植术为将角巩膜缘处的正常结膜组织移植到空白带,使角
  • 龟甲龟甲,又称龟壳,是龟鳖目动物的甲壳,是由它们的肋骨进化成特殊的骨制和软骨护盾。 。可保护龟的身体。清光绪年间,金石学家王懿荣偶然在龟甲上发现有古文字,即是后来的甲骨文。部
  • 儿童安全包装儿童安全包装是指一种特别的包装方式,可以减少儿童食用危险物品的风险。一般会在容器上有特殊的安全盖,一般会规定处方药及非处方药的药罐上会有这类的包装,像杀虫剂或其他家用
  • 甜椒菜椒(学名:Capsicum annuum var. grossum),别名甜椒,因其体型宛如灯笼及柿子而也叫“灯笼椒”或“柿子椒”(台湾话则常作“大筒仔”),又因其外皮多为绿色而俗称“青椒”,是茄科辣椒属
  • 连二磷酸79.5~81.5℃(一水合物)62~62.5℃(二水合物)连二磷酸(英语:Hypophosphoric acid),化学式H4P2O6,是一种无机酸,其中磷的氧化数为+4,故具有还原性。其固体多以二水合物(H4P2O6·2H2O)形式存在
  • 西美昂·萨克森-科堡-哥达斯基西美昂·鲍里索夫·萨克森-科堡-哥达斯基(Симеон Борисов Сакскобургготски,1937年6月16日-),又称西美昂二世(Симеон II),保加利亚最后一任沙皇
  • 滤器过滤器(filter)的本义是滤器、过滤,在许多领域上有不同定义。
  • 鲍比·伯克鲍比·詹姆斯·伯克(英语:Bobby James Berk,1981年8月25日-),是一名室内设计师和真人实境秀演员。他因为担任网飞真人秀节目《粉雄救兵》的室内设计专家而知名。
  • 圣诞树星球《圣诞树星球》(意大利语:)是意大利儿童文学作家贾尼·罗大里所著的长篇童话。在圣诞树星球上,每天都是圣诞节,树上挂满了各种各样的礼物;商店里的橱窗没有玻璃,人们可以随便拿自己
  • 龙钦巴龙钦巴尊者(藏文:.mw-parser-output .uchen{font-family:"Qomolangma-Dunhuang","Qomolangma-Uchen Sarchen","Qomolangma-Uchen Sarchung","Qomolangma-Uchen Suring","Qomolangma-Uchen Sutung","Qomolangma-Title","Qomolangma-Subtitle","Qomolangma-Woodblock","BabelStone Tibe