What's NEW in C++/CLI Language
作为同时适用于本地/托管环境的新一代C++语言扩充,C++/CLI的定位与原有的Managed Extensions for C++基本一致,在CLR 2.0环境中,它主要承载了如下5个使命:
A. 源码级集成 (本地/托管/混合代码编译)
B. 对象模型集成 (本地类型/指针、CLR类型/指针等)
C. 组件模型集成 (元数据支持、属性-事件语义、P/Invoke/COM Interop/C++ Interop集成等)
D. 泛型及模板集成 (传统Template、托管Template、Generics、泛型集合类)
E. 大型框架集成 (STL.net等)
由于目前除了ECMA标准文本之外,还没有一本关于C++/CLI的入门专著,因此,我根据自己的理解对其所引入的新特性进行了简要的总结和分类,其详细内容均可在MSDN中按图索骥。在理解其目标定位的前提之下,从语言特性的角度来看,C++/CLI对ISO C++的扩充主要包括如下3方面,其中的下划线部分是目前网上谈论得比较多的dd:
1. Object-Model related
1.1 Memory Managements
·managed handle & tracking reference
·reference type / value type / interface
·boxing / unboxing / stack sementics ·interior_ptr<T> / pin_ptr<T>
1.2 Resource Managements
·IDispose pattern
·destructor / finalizer
·static constructor
1.3 Managed Array
·multi-dimensional array
·jagged array
1.4 New modifiers
·class-modifiers: abstract / sealed
·member function-modifiers: virtual / new / override
2. Component-Model related
2.1 Delegate & Event
·bound delegate / unbound delegate
·event pattern / composing delegates
·accessor of event: add / remove / raise
2.2 Managed Property
·accessors: getter / setter
·indexed property
·multi-dimensional property
2.3 Exceptional Processing
·managed exception
·wraps of SEHException
3. Templates & Generics related
3.1 Generics
·generic functions / classes / interfaces / delegates
·explicit constraints of type parameters based on base-class & interface
·classes of generic collections (what, why, how)
3.2 Managed Template
·differences between templates and generics
·combining templates and generics
3.3 'for each ... in' statement
最后以blog风格废话几句,嗯... 总体感觉C++/CLI语义比MCPP更加清晰、规范,也更简练,但并没有绝大多数人强调的那般夸张,比方说我就不认为__box是多余的,新引入的隐式boxing和栈对象语义反倒还更容易鼓励程序员忘却装箱性能损耗、妨碍优化并制造混乱...也许我从来没有真正觉得MCPP麻烦过... 尽管C++/CLI已经成为了一门现实中的标准语言,尽管它不断地追求着文法的完备和完美,但还是存在着许多令人觉得不自然的地方,也许这应当归结成为:“微软的产品,凡属是不好用的,都是那些连微软自己都没想清楚的”。
不管怎么说,.Net发展至今,无论是何种语言,语言本身已不再重要(apl.net/ocaml.net/oberon.net/haskell.net,who care?),重要的是语言对CLR及组件环境的支持和理解,或许对我们而言,处于托管/非托管边界上的C++/CLI所揭示的CLR思想和设计理念,比它本身所具备的语法特性更为关键。
转载于:https://www.cnblogs.com/neoragex2002/archive/2005/12/04/290549.html
What's NEW in C++/CLI Language相关推荐
- C++/CLI中的资源清理(Destructor,Finalizer)
本文将分成三部分,他们分别是引言.Destructor,Finalizer的语法表示.如何保证Destructor,Finalizer与其他语言兼容. 一. 引言 资源是一个很大的范畴,先让 ...
- [Share].NET Reflector Add-Ins
今天在这里看到一份关于Reflector的非常好的资源,这里列出几乎所有的Reflector的add-in,具体看下面列表. 下载 .NET Reflector here . Add-Ins Code ...
- 立足现实 与时俱进:C++ 1991-2006 reference
引用: [1] David Abrahams: Exception-Safety in Generic Components.M. Jazayeri, R. Loos, D. Musser (eds. ...
- 开发工具合集专题《管理工具,DoxygenAPI文档自动生成》
Doxygen是一种开源跨平台的,以类似JavaDoc风格描述的文档系统,完全支持C.C++.Java.Objective-C和IDL语言,部分支持PHP.C#.注释的语法与Qt-Doc.KDoc和J ...
- [经验总结]我的Doxygen配置文件
# Doxygen是个非常优秀的自动化生成代码文档的开源软件,大约零六年开始使用这个软件,经常用这个软件来帮我分析源代码. # 最近在Windows平台上做开发,也在Windows平台配置了一份Do ...
- reflector 插件_Reflector插件和PowerShell语言对Reflector的支持
reflector 插件 Hopefully if you've been coding .NET for a while, someone has shown you Reflector, Lutz ...
- .NET Reflector 资料收集
Introduction to the .NET Reflector Add-In Model 原文地址 Reflector add-in 是一个dll/exe 的assembly文件,里面有一个包, ...
- Visual C++中删除托管对象、包装库及其他
本文将给大家讲解一下 Visual C++中如何 删除托管对象.包装库及其他,大家在实际开发中可以做个参考. 问:能否告诉我,在托管 C++ 中,使用 delete 操作符销毁托管对象是否安全? Be ...
- C++/CLI思辨录之内部指针的两面性
在本文中,我将解释为什么使用本地指针来管理对象.原因在于对象是以垃圾收集器移动的.所以,当对象移动时,本地指针就变成无效的.所以,如果你想取得一个托管对象的本地指针,你就会遇到一个编译错.下面的代码显 ...
最新文章
- 优达学城《DeepLearning》2-5:风格迁移
- SpringMVC 学习系列 (4) 之 数据绑定 -1
- android UI设计时须要注意遵循的设计原则
- android自动跑马灯,Android-最强跑马灯
- Oracle ODP.NET数据库访问连接字符串
- LeetCode 1249. 移除无效的括号(栈+set / deque)
- IIS7 如何设置读取、脚本和可执行文件的执行权限
- java编程——图片旋转
- 2019券业IT投入突破200亿!国君华泰中信均超10亿,新评价标准下东财、平安、东方、安信、中泰加分最多
- 新手如何快速上手双拼,提高打字速度-by小鹤双拼输入法QQ群友-弧
- markdown如何设置图片大小_Markdown 调整图片位置与大小
- python枚举算法流程图_python机器学习十大算法案例
- 显示器html看电视声音,电脑连接HDMI显示器后没声音(无需外置转换线)的解决方法...
- ReversingWithLena——01. Olly + assembler + patching a basic reverseme
- ti-sdk-evm-am335x-05.07 uboot分析(MLO跳转到u-boot之前)
- 计算机系统变更注意事项,电脑更换cpu注意事项
- 利用python分析电商_基于Word2Vec+SVM对电商的评论数据进行情感分析
- ThinkPad T480 Win10系统键盘失灵
- 第17课 项目成本管理
- 传奇登录器打不开的四种原因
热门文章
- javasript --- 一个日期规范(x秒前,x分前...)
- Oracle密码过期问题 ORA-28001:the password has expired
- 顶级数据库行会Percona阿里全面解析下一代云数据库技术
- SVN学习(二)——SVN 提交、更新、解决冲突等操作步骤
- 批量下载小说网站上的小说(python爬虫)
- android获取控件宽度高度
- 淘宝跨域获取Cookie分析
- 空间索引不能用analyze进行分析
- SQL server中DateTime类型字段如何赋值零?
- C#与halcon联合开发——内存溢出