[C++/CLI编程宝典][2]什么是C++/CLI语言

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情


对于什么是C++/CLI,我们首先可以简单的将其名字划分为两部分来理解,第一,C++,我们熟悉的目前被广泛使用的面向对象的ISO国际标准的高级语言,也称为ISOC++,我们这里以后均称其为ISOC++;第二,CLI,我们可以认为是对ISOC++在CLI上扩展。CLI是通用语言框架的缩写,微软的.NET就是架构在CLI其上,虽然CLI现在也是ISO标准,但是C++/CLI并不是ISOC++委员会对其进行的扩展,所以C++/CLI并不是新版的ISOC++标准,它只是微软针他的CLI实现.NET的扩展。虽然C++/CLI目前并不是ISO标准,但是C++/CLI结合了ISOC++和.NET具有超强的能力,这也就注定了它不可能被我们忽视。

其实C++/CLI除了包含ISOC++和CLI扩展,还有它之所以强大的更重要的原因就是它实现了ISOC++和.NET的无缝连接。下面就详细看这三方面:

1)ISOC++语言

我们知道C++是一门ISO的面向对象的语言,对于这门语言我们也从以下三个方面来看,也正是这三个主要方面决定了他被广泛的使用。第一,C++是一个功能强大的语言。比如C++语言本身提供的基于C语言的内嵌类型,数组,结构体和指针等,C++比C新加入的面向对象的Class,继承,多态和模板等,还有C++标准模板库(STL)提供的实际开发当中常用的数据结构和算法的实现;第二,大量的开源和第三方库,如果在windows上使用C++开发,首先我们可以借助microsoft对C++提供的强有力的支持,比如说VS编译器,还有UI库MFC,还有ATL等;除此之外我们还可以看到其他的许多非microsoft的开源的和第三方的支持,比如说Boost很大程度的扩充了STL,提供了更多更高级的功能,还有Loki把C++与设计模式结合起来,还有很多的第三方的UI库,比如QT,WxWindows,WTL,GTK等,第三方的网络通信库,比如ACE,StreamModule等,第三方的XML库,比如Xerces,CMarkup,tinyxml等,第三方的科学计算库,比如Blitz++,MTL等,第三方的游戏开发库,比如OGRE,KlayGE等,第三方的线程库,比如C++ Threads,ZThreads等,还有其他的很多;第三,C++的高性能。C++的这一特性也是毋庸质疑的,我们知道的大部分的操作系统,嵌入式开发,游戏,图像软件离不开C++,这都是跟C++的高性能有很大的关系,单从这一点来看,这就是很多现代的其他的高级语言所欠缺的,也正是这点注定了C++以后仍然有很长的路要走。

2)CLI

CLI(Common Language Infrastructure,通用语言框架)提供了一套可执行代码和它所运行需要的虚拟执行环境的规范。更通俗的我们可以说它是一个虚拟平台,是操作系统和应用程序间的一层抽象。微软的.NET的基础CLR(Common Language Runtime,通用语言运行时)就是CLI的一个实例。CLI主要的组成部分有:CTS,Metadata,CLS和VES。

CTS(Common Type System,通用类型系统)是CLI的基础,它是一个类型规范,定义了所有CLI平台上可以定义的类型的集合,所有基于CLI的语言类型都是CTS的一个子集,目前C++/CLI是对CTS描述支持最好的高级语言。

Metadata(元数据):用来描述和引用CTS定义的类型,元数据以一种独立于任何语言的形式存储,正是元数据赋予了组建自描述的能力。

CLS(Common Language Specification,通用语言规范),是用以确保所有CLI语言能够互操作的一组规则,它定义了所有CLI语言都必须支持的一个最小功能集(一个CTS的子集)。各CLI语言可以选择自己对CTS的一部分的映射,但是为了确保不同语言的交互,至少应该支持CLS所定义的最小功能集。

VES(Virtual Execution System,虚拟执行系统),为CLI程序提供了一个在各种可能的平台上加载和执行托管代码的虚拟机环境,只是一个规范,比如微软和momo就各有自己的实现。.NET的CLR的JIT和GC应该属于此范围。

.NET Framework是微软对CLI的一个实现,当然也是目前最好的实现,.NET Framework主要包含CLR和BCL,CLR是核心也即CLI的实现,BCL是一套通用的代码库,可以被所有的.NET语言(C#, VB.NET, C++/CLI)程序所使用。

3)ISOC++和CLI的无缝连接

C++/CLI支持对本地ISOC++编程和.NET托管编程的无缝集成,不是简单的混合,不仅能够像.NET调用windows APIs一样通过P/Invoke来实现函数互调,而且可以实现类型class级和ISOC++和.NET类库的相互使用,更强的是能够实现类型的混合。为了实现无缝连接,绝大多数的以前的ISO C++代码编译后将得到托管代码,部分不能编译为托管IL的采用P/Invoke调用实现。代码托管,但是数据并不托管,原来ISOC++中本地堆内的数据仍位于本地堆中。

综上,我们可以总结C++/CLI是ISOC++在.NET的扩展,是ISOC++和.NET的无缝结合。

CLI 语言一览表 http://en.wikipedia.org/wiki/List_of_CLI_languages       CLI 语言是指用于创建符合“公共语言体系(Common Language Infrastructure)”的库和程序的计算机语言。除了一些明显的例外,绝大多数 CLI 语言全部编译成为“公共中间语言(CIL,Common Intermediate Language)”;而 CIL 阅读详情

相关推荐

[C++/CLI编程宝典][5]编译与反汇编

通过上次的第一个简单的C++/CLI实例,我们已经对C++/CLI的基本语法有了一定的认识,一些新的关键字也混了个眼熟。其实如果你有ISOC++背景,了解一些.NET相关概念,且使用VS2008 IDE开发的话,相信到现在你已经可以使用C++/CLI写一些简单的小程序了。本次继续上次的sample来深入了解它的编译和反编译。  1)编译 在安装了VS2008或WinSDK后,我们就拥有了很多的

http://itech.cnblogs.com 1300

由浅入深CIL系列:2.CIL的基本构成+CIL操作码速记表+CIL操作码大全速查

        一、CIL的基本构成          CIL由CIL指令(directive)、CIL特性(attribute)、CIL操作码(opcode)组成。           CIL指令         CIL指令是用于描述.NET程序集总体结构的标记,并且通知CIL编译器如何定义在程序集中用到的命名空间、类、成员的。它以(.)一个点号开头,例如:.namespace、.clas...

weixin_34232744的博客 1127

C++/CLI:第一流的CLI语言

C++/CLI:第一流的CLI语言 出处: 天极网 责任编辑:方舟 1. 简介  本文并不是为了奉承C++/CLI的辉煌,也不是为了贬低其它如C#或者VB.NET等语言,相反,这只是一个非官方的、以一个喜欢这种语言的非微软雇员身份来论证C++/CLI有它的自己的唯一的角色,可作为第一流的.NET编程语言。  一个不断在新闻组和技术论坛上出现的问题是,当象C#和VB.NET这样的语言更适合于这种

Mobidogs Blog 1770

c++/cli(一)——简介

什么是c++/cli? C++/CLICLI:CommonLanguageInfrastructure)在计算机语言中是一门由微软设计,用来代替C++托管扩展(Managed C++,下文使用MC++指代)的语言。这门语言在兼容原有的C++标准的同时,重新简化了托管代码扩展的语法,提供了更好的代码可读性。 C++/CLI是一门独立的语言(比如新的关键字),而不是像C++托管扩展一样是C++的超集。(C++托管扩展有一些不标准的关键字如__gc和__value)。所以,C++/CLI对于这些语法有...

duanxinyao的专栏 3469

[C++/CLI编程宝典][1]C++/CLI资料汇总

一 在线资料1)functionX:http://www.functionx.com/cppcli/index.htm2)functionX:http://www.functionx.com/vccli/index.htm3) codegure:http://www.codeguru.com/cpp/cpp/cpp_managed/general/article.php/c148154) we

MyHell 672

[C++/CLI编程宝典][3]C++/CLI能做什么

上次我们看了什么是C++/CLI,我们知道C++/CLI其实是包含了三部分:ISOC++,对CLI的.NET实现的扩展和前二者的无缝连接。本次继续上次,更近一层解释读者关心的三个问题:第一,使用C++/CLI我们可以做什么,它可以被使用在那些方面;第二,那些朋友需要学习C++/CLI;第三,学习C++/CLI需要哪些基础。1)使用C++/CLI我们可以做什么?对于C++/CLI可以做什么?我们可以

MyHell 549

[C++/CLI编程宝典][4]第一个C++/CLI程序

一 本次通过一个简单的C++/CLI控制台程序,能使学习者有对C++/CLI程序有个个大概的印象,同时引出一些基本的概念和关键字。下面是程序代码:#include #include // 1 ISOC++public class NativeClass{public: NativeClass(std::string str) { m

MyHell 892

[C++/CLI编程宝典][6]IL中间语言

继续上节的ildasm.exe对main.exe的IL中间语言的分析。我们知道我们在main.exe中定义了NativeClass,ValueStruct和RefClass。下面我们将做类型与IL中间语言的一一对应:   1)NativeClass C++/CLI代码: CodeCode highlighting produced by Actipro CodeHighlighter (f

http://itech.cnblogs.com 1324
上一篇: [C++/CLI编程宝典][1]C++/CLI资料汇总
下一篇: [C++/CLI编程宝典][3]C++/CLI能做什么
itech_001
博客等级 码龄14年 75粉丝 557原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值