[C++/CLI编程宝典][2]什么是C++/CLI语言
对于什么是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的无缝结合。
作者:iTech
出处:http://itech.cnblogs.com/
欢迎转载,欢迎增加qq交流群172758282来讨论build_release/Linux/Perl/Python/Jenkins!
[C++/CLI编程宝典][2]什么是C++/CLI语言的更多相关文章
- GUI编程与CLI编程
作为一名多年的iOS开发人员,多次触发我思酌“GUI编程与CLI编程”各自的优劣,尤其是在当我为界面交互花费大占比时间时,时常怀疑自己的工作性质,我终究还是为互联网工作的码农,而不是让互联网为我所用的 ...
- 《Go并发编程实战》读书笔记-初识Go语言
<Go并发编程实战>读书笔记-初识Go语言 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在讲解怎样用Go语言之前,我们先介绍Go语言的特性,基础概念和标准命令. 一. ...
- 网络编程—【自己动手】用C语言写一个基于服务器和客户端(TCP)!
如果想要自己写一个服务器和客户端,我们需要掌握一定的网络编程技术,个人认为,网络编程中最关键的就是这个东西--socket(套接字). socket(套接字):简单来讲,socket就是用于描述IP地 ...
- PHP CLI编程基础知识积累(进程、子进程、线程)
.note-content { font-family: "Helvetica Neue", Arial, "Hiragino Sans GB", STHeit ...
- 《C#编程宝典:十年典藏版》阅读笔记(1)
1.运行时错误,使用Checked块语句进行异常检查与抛出异常. 2.值类型使用线程堆栈保存数据,数据大小大概为1M左右,引用类型使用托管堆保存数据,可以无限分配空间,因为有一个GC垃圾回收机制存在, ...
- codeblocks 配置 opengl 编程宝典 的 gltools 环境
懒得多说,亲测,这个问题,csdn 和 cnblog 上的博客真的没有一个能解决的. 这个帖子2L的答案则完美解决了问题,虽然步骤有些繁琐,过程还是英文,但考虑到了可能出现的各种问题,跟着走一遍就完美 ...
- WPF编程宝典(Pro wpf in c# 2012)(文摘)
第一部分 基础知识 第1章 WPF概述 第2章 XAML 第3章 布局 第4章 依赖项属性 第5章 路由事件 第二部分 进一步研究WPF 第6章 控件 第7章 Application类 第8章 元素绑 ...
- 如何成为游戏的生产者——第二章:如何开始你的编程(开发环境的搭建、C++语言适应)
如何成为游戏的生产者--文章二章:怎样開始你的编程 小故事:上节说到我六年级打开了那本C语言的书,然后其实我还是没看懂.好像看懂了一些printf语句.之后遇到了史无前例的困难--怎么让代码执行起来. ...
- 全网最详细的hive-site.xml配置文件里添加<name>hive.cli.print.header</name>和<name>hive.cli.print.current.db</name>前后的变化(图文详解)
不多说,直接上干货! 比如,你是从hive-default.xml.template,复制一份,改名为hive-site.xml 一般是 <configuration> <prope ...
随机推荐
- html5的自定义data-*属性和jquery的data()方法的使用
人们总喜欢往HTML标签上添加自定义属性来存储和操作数据.但这样做的问题是,你不知道将来会不会有其它脚本把你的自定义属性给重置掉,此外,你这样做也会导致html语法上不符合Html规范,以及一些其它副 ...
- JDBC操作数据库的学习(1)
单单对数据库的操作,比如说MySQL,我们可以在命令行窗口中执行,但是一般是应用程序要操作数据库,因此我们应该在程序中的代码上体现对数据库的操作,那么使用程序应用如何操作数据库呢?那就要使用到数据库的 ...
- the least common multiplier
Description There are many unsolvable problem in the world.It could be about one or about zero.But t ...
- 【ASP.NET Web API教程】3 Web API客户端
原文:[ASP.NET Web API教程]3 Web API客户端 Chapter 3: Web API Clients 第3章 Web API客户端 本文引自:http://www.asp.net ...
- hdu 4090 GemAnd Prince
题目大意: 别人说是消消看,至于你玩没玩过.反正我是没玩过的. 就是选择一个钻石,可以消除与它相连的所有钻石.并获得 消除数量*消除数量 的分 思路: 直接暴搜,然后用一个cnt数组表示每一种钻石剩 ...
- Delphi与Vista提供的UAC控制(1-代表资源编号,24-资源类型为RTMAINIFEST,最后用brcc32编译成资源文件)
Vista提供的UAC机制,是Vista的新增功能之一.它的主要目的是防止对于操作系统本身的恶意修 改.如果想对于Vista的 系统设置进行改动,必须通过UAC的验 证才能够进行.通过这样的手段,大大 ...
- C文件操作的语言fgets()
谈fgets(..)功能. 原型 char * fgets(char * s, int n,FILE *stream); 參数: s: 字符型指针.指向存 ...
- li里的a标签浮动了,为什么li本身也浮动了?
<ul> <li><a href="#"></a></li> <li><a href="#& ...
- JVM查找类文件的顺序(转)
配置classpath 根据path环境变量的原理,可以定义一个名为classpath环境变量,将要运行的class文件所在目录定义在该变量中. 例:set classpath=c:\ classpa ...
- 简体中文 — ANSI Common Lisp 中文版
简体中文 - ANSI Common Lisp 中文版 简体中文¶