当前位置:七道奇文章资讯编程技术VC/C++编程
日期:2011-03-22 13:56:00  来源:本站整理

<b>超越C++:下一代C++--C++/CLI简介</b>[VC/C++编程]

赞助商链接



  本文“<b>超越C++:下一代C++--C++/CLI简介</b>[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
1、绪论

  当微软推出VS.NET7实现了可扩大的托管C++后,C++程序员们反映不一.固然大部份的程序员关于可以持续利用C++感到很欣喜,但几近全部的人关于托管C++供应的晦涩语法感到很痛楚.微软明显从反馈中感遭到托管C++不是那么成功.

  2003年10月6日,ECMA(欧洲计算机制造商协会)公布成立专家组,负责结合ISO尺度C++与通用语言,开辟一个可扩大语言的尺度,这个新的可扩大语言被称为C++/CLI尺度.这个尺度将被VS.NET2005的C++编译器支持.

  2、老语法存在的问题

  1、晦涩烦琐的语法和文法--这两个"双重底线"问题加重了阅读的负担.

  2、二流的CLI支持--相对与C#与VB.NET,MC++利用不便利的工作区来供应CLI支持,比方,它没有一个一一对应的构造来摆列.NET的调集.

  3、C++与.NET粗陋地结合--关于CLI范例,你不能利用C++的特点,比方模板;一样,关于C++范例,你不能利用CLI的特点,比方碎片帐集.

  4、令人混合的指针--非托管的C++的指针及托管的引用指针都利用*语法,这非常令人混合,因为-gc指针与托管指针在本质和行为上完好差别.

  5、MFC编译器不能产生可校验的代码.
 
  3、C++/CLI给我们供应了什么?

  1、文雅流利的语法和文法--C++/CLI为C++开辟人员书写托管代码供应了一种非常自然的感受,并且它供应了非托管代码到托管代码的平滑过度.从前所谓的"双重底线"问题目前已经荡然无存.

  2、一流的CLI支持--CLI特点,比方属性、碎片调集和属类得到了直接支持,此外,C++/CLI还准许将这些特点用于本地非托管的类.

  3、一流的C++类支持--C++特点,比方模板和析构函数关于拖管和非拖管类持续有效.实际上,C++/CLI是你可以"表面上"在栈或C++本地堆上声明一个.NET范例唯一的.NET语言.

  4、在.NET与C++之间的沟壑上架起了一座桥梁--C++开辟人员在抨击BCL时不再象脱离水的鱼.

  5、C++/CLI编译器产生的可履行文件美满是可校验的.

  4、"Hello World"小程序

using namespace System;
void _tmain()
{
  Console::WriteLine("Hello World");
}
   上述代码除了不需求引用mscorlib.dll库外,与老的语法没有太大的辨别,因为无论你什么时刻利用/clr举行编辑,编译器都可以暗中举行引用(目前默许的是/clr:newSyntax).

  5、句柄

  与老的语法主要的混合是我们习惯于利用*标记来声明拖管引用或非拖管指针,在C++/CLI里微软引入了句柄的概念.
void _tmain()
{
  //The ^ punctuator represents a handle
  String^ str = "Hello World";
  Console::WriteLine(str);
}

^标记代表一个托管对象(声明时看上去象个帽子),按照CLI的规定,句柄代表一个拖管对象的引用.句柄在CLI中是新的语法,相当于C++中的-gc指针.句柄与指针不再混合,在本质上二者完好差别.

   6、句柄与指针是怎样区脱离来的?

   1、指针声明时利用*标记,而句柄利用^标记.

   2、句柄是针对拖管堆上对象的拖管引用,而指针仅仅指向内存中的一个地址.

   3、指针很安定,GC循环不会影响到它;句柄在基于GC或内存慌张的情形下,可以指向差别的内存位置.

   4、关于指针,程序开辟人员必须"显式"地删除,不然会面对泄露的危险,而关于句柄,能否举行显式删除则完好按照程序人员的爱好了.

   5、句柄一定要指向一个具体的范例,即所谓的范例安全性,而指针明显不是这样,你决不可以将一个句柄指向Void^范例.

   6、正如new操作符返回一个指针一样,gcnew返回一个句柄.

   7、CLR对象示例

void _tmain()
{
  String^ str = gcnew String("Hello World");
  Object^ o1 = gcnew Object();
  Console::WriteLine(str);
}
   关键字gcnew用来实例化一个CLI对象,并且它返回一个指向在CLR堆上的对象的句柄,gcnew的长处在于它可以便利的让我们辨别拖管和非拖管的实例对象.

   大部份情形下,gcnew关键字和^操作符供应了你用来举行BCL的一切手段,但是很明显你需求成立和声明属于自己的拖管类和接口.
  以上是“<b>超越C++:下一代C++--C++/CLI简介</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .