C++/CLI简介

转帖|其它|编辑:郝浩|2008-10-07 14:37:04.000|阅读 834 次

概述:C++/CLI简介

# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>

托管的C++(MC++)饱受诟病的一个地方就是语法格式和普通的编程语言差别很大,很多人都评价为: ugly 和  twisted 语法。

因为.net 的基础之一Common Language Infrastructure CLI是提交给了ECMA标准委员会。为了改进现有的MC++ ECMA在 2003年10月份起动了一个新的工作小组,其任务是为ISO标准的C++和CLI之间的交互操作提供一组新的语言扩展。这也就是C++/CLI的由来。

改进前的MC++有如下缺点:

  • 语法格式不雅观,比如很多双下划线的关键字;
  • 托管的C++在和CLI交互是并不能使用全部的功能,比如在C#或者VB.NET中可以使用 for-each 等语法,而MC++不可以;
  • MC++提供不了一些标准C++的语言特性,比如:C++中的模板,和CLI的内存收集(garbage collection);
  • 非托管的指针和托管的引用指针在语法上都用*表示,容易混淆;
  • MC++的编译器的效果不好。

现在的C++/CLI也就是Whidbey中的MC++,完全解决了上面的ugly 和 twist的问题。

下面我们来介绍一些特性:

还是从HelloWord 开始吧:

void _tmain()

{

//^ 号是新引进的语法,表示一个handler

String^ str = "Hello World";

    Console::WriteLine(str);

}

上免得 ^str handler就表示指向一个托管对象的引用。

Handler 和 C++中的指针的区别如下:

  • 语法上 用 ^和*区别;
  • Handler是建立在托管堆上的一个被(CLI)管理的引用,而指针指向一个物理的内存地址;
  • 指针不受垃圾回收器的影响,而handler实际指向的内存地址则收垃圾回收器的管理;
  • 使用指针必须用声明使用delete来释放内存,而handler可以使用也不可以使用;
  • Handler是类型安全的,每个指向托管对象的handler都对应一个具体的类型,而指针则没有要求,比如可以使用void * 指针;
  • 语法上使用new返回一个指针,而gcnew返回一个handler。

请看下面的例子:

void _tmain()

{

    String^ str = gcnew String("Hello World");

    Object^ o1 = gcnew Object();

    Console::WriteLine(str);

}

上例gcnew用来在CLR堆上初始化一个托管对象并返回一个handler。这样的语法可以和指针的声明很清楚的区别开来。

看一个具体的例子:

using namespace System;

interface class IDog

{

    void Bark();

};

ref class Dog : IDog

{

public:

    void Bark()

    {

        Console::WriteLine("汪汪");

    }

};

void _tmain()

{

    Dog^ d = gcnew Dog();

    d->Bark();

}


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com

文章转载自:CSDN

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP