<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++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |