超越C++下一代C++—C++CLI简介

超越C++下一代C++—C++CLI简介,第1张

超越C++下一代C++—C++CLI简介,第2张

一、引言
当微软推出VS.net7实现可扩展的托管C++时,C++程序员反应不一。尽管大多数程序员乐于继续使用C++,但几乎所有人都对托管C++提供的晦涩语法感到痛苦。微软从反馈中明显感觉托管C++并不那么成功。

2003年10月6日,ECMA(European Computer Manufacturers Association,欧洲计算机制造商协会)宣布成立一个专家组,负责通过将ISO标准C++与通用语言相结合来开发一个可扩展的语言标准。这种新的可扩展语言被称为C++/CLI标准。VS.net2005的C++编译器将支持该标准

第二,旧语法的问题

1.晦涩繁琐的语法——这两个“双底线”问题增加了阅读的负担。

2.二流的CLI支持——相比C#和VB.NET,MC++使用不方便的workspace来提供CLI支持。例如,它没有一对一的结构来列出。净收藏。

3.C++和。NET——对于CLI类型,不能使用C++的特性,比如模板;同样,对于C++类型,也不能使用CLI特性,比如碎片化的账套。

4.混淆指针——非托管C++指针和托管引用指针都使用*语法,这非常混淆,因为-gc指针在性质和行为上与托管指针完全不同。

5.MFC编译器无法生成可验证的代码。

三。C++/CLI给我们提供了什么?

1.优雅流畅的语法——C++/CLI为c++开发人员编写托管代码提供了非常自然的感觉,它提供了从非托管代码到托管代码的平滑过渡。所谓的“双底线”问题消失了。

2.一流的CLI支持——直接支持CLI特性,如属性、片段集和泛型类。此外,C++/CLI允许这些功能用于本地非托管类。

3.一流的C++类支持——c++的特性,比如模板和析构函数,对于拖动类和非拖动类仍然有效。实际上,C++/CLI是一种. NET语言,在这种语言中,您可以在C++的堆栈或本地堆上“表面上”声明一个. NET类型。

4.在…之间架起一座桥梁。NET和C++ - C++开发人员在攻击BCL时不再像鱼离水。

5.C++/CLI编译器生成的可执行文件是完全可验证的。

四。“Hello World”小程序

使用命名空间系统;
void _ tmain()
{
Console::WriteLine(" Hello World ");
}


上面的代码除了不需要引用mscorlib.dll库之外,和旧的语法没有太大区别,因为每当你使用/clr进行编辑的时候,编译器都可以偷偷引用它(现在默认为/clr:newSyntax)。

动词 (verb的缩写)处理

旧语法的主要困惑是,我们习惯于使用*符号来声明拖动引用或非拖动指针。微软在C++/CLI中引入了handle的概念。

void _ tmain()
{
//^标点符号代表一个handle
string^ str = " hello world ";
Console::WriteLine(str);
}


该符号表示一个托管对象(声明时看起来像一顶帽子)。根据CLI,句柄表示对被拖动对象的引用。Handle是CLI中的新语法,相当于C++中的-gc指针。句柄和指针不再混淆,但本质上是完全不同的。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 超越C++下一代C++—C++CLI简介

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情