C++/CLI 简单介绍

原创 2004年10月14日 09:58:00

C++/CLI简介

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

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

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

1、 语法格式不雅观,比如很多双下划线的关键字;

2、 托管的C++在和CLI交互是并不能使用全部的功能,比如在C#或者VB.NET中可以使用 for-each 等语法,而MC++不可以;

3、 MC++提供不了一些标准C++的语言特性,比如:C++中的模板,和CLI的内存收集(garbage collection)

4、 非托管的指针和托管的引用指针在语法上都用*表示,容易混淆;

5、 MC++的编译器的效果不好。

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

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

还是从HelloWord 开始吧:

void _tmain()

{

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

String^ str = "Hello World";

    Console::WriteLine(str);

}

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

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

1、 语法上 ^*区别;

2、 Handler是建立在托管堆上的一个被(CLI)管理的引用,而指针指向一个物理的内存地址;

3、 指针不受垃圾回收器的影响,而handler实际指向的内存地址则收垃圾回收器的管理;

4、 使用指针必须用声明使用delete来释放内存,而handler可以使用也不可以使用;

5、 Handler是类型安全的,每个指向托管对象的handler都对应一个具体的类型,而指针则没有要求,比如可以使用void * 指针;

6、 语法上使用new返回一个指针,而gcnew返回一个handler

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

请看下面的例子:

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();

}

看起来很舒服,是吧

 

田春峰

2004-10-14


原文地址: 这里
http://www.winterdom.com/cppclifaq/


9月17日Stan Lippman访谈录文字节选

版权声明:本文为博主原创文章,在不删除、修改文章内容的情况下,可以自由转载。

VUE-CLI搭建及其简单介绍

安装node.js(http://nodejs.cn/download/ 可以下载到)安装淘宝镜像npm install -g cnpm --registry=https://registry.np...

C++/CLI 托管C++的数据类型介绍【2】

CLI: 公共语言基础构造(Common Language Infrastructure),是由ECMA(欧洲计算机制造商协会)成立专家组,并结合ISO 标准、开发形成的一个可扩展语言标准。   ...

STK X教程—C++/CLI源代码

  • 2013年03月26日 21:48
  • 134KB
  • 下载

vue-cli的构建+Vue的超级简单实例

☞ vue-cli的构建 ☞ 构建一个简单的Vue导航栏菜单实例

Manning.C++CLI.in.Action.Apr.2007

  • 2013年08月30日 15:44
  • 17.83MB
  • 下载

react-native-cli简单理解

在项目下通过npm为该项目安装react-native后,在node_modules中就有react-native这个文件夹。进入该文件夹,有一个local-cli文件夹。这个文件夹是被react-n...

C++/CLI 规范英文版

  • 2010年01月28日 12:47
  • 1.12MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++/CLI 简单介绍
举报原因:
原因补充:

(最多只允许输入30个字)