超越C++下一代C++—C++CLI简介
一、引言
当微软推出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指针。句柄和指针不再混淆,但本质上是完全不同的。
0条评论