`

c++/cli的用途

    博客分类:
  • c++
阅读更多

两年前曾经在中石油做过一段时间的外包项目。当时client和一些密集计算部分使用了c++/cli 这是我第一次接触这个东西。

好久前曾经体验过 managed c++。可惜这东西的语法给我印象太坏。。用了一堆下划线不说。。连托管对象和一般heap对象都用* 表示。极其混乱。。记得当时有一个网络包是用managed c++写的,看了头大无比。后来只能自己部分实现了一个简易的顶着。

 

c++/cli是个极其复杂的东西。可以说是个怪物。有些佩服ms的人,居然可以把一套.net和c++基本上做到了无缝连接。

 

先说缺点:

 

1:庞大,类型之间的关系不易搞清楚。。特别是.net based generic type和一般的template。如果混用是件需要小心处理的事情。记得当初做地图cache使用template实现了一个policy模式的插件,使用者说没见过...不会用...........

 

2: 编译速度慢...和c#比 非常慢...而且intelli sense经常会无故失效。。导致开发效率实际上不高...

 

3:资料不多。。书的话 印象中只有一本 c++/cli in action。

 

优点:

 

1:无缝连接:可以很方便使用各种native lib,如果嫌麻烦可以直接调用.net的类库。可以写一个 同时给.net & non .net用的dll。当时要写一个hook的东东,里面同时使用了win32 api, boost和一些.net的库。如果使用C#,不免要做一堆p/invoke。p/invoke不好在于交互的粒度太大,是以函数作为一个单位的。对于某些需要做结构上的更细粒度的交互就显得很麻烦。而且最大的毛病是经常搞乱参数的类型。。int* 可以传 IntPtr, 可以传Int32, UInt32。见过好几个人的p/invoke wrapper。居然传入的参数类型都不一样......

 

2: 性能提高。c++/cli支持 stack semantics。可以及时释放managed object而不需要等到finalize。

 

3:内存泄露的减少。对于native c++ 虽然有smart pointer 内存泄露和利用率不高依然是个毛病。如果对于非托管部分的使用维持在一个范围内,那么相对来说产生内存泄露的机会会少些。目前来看.net的垃圾回收 还是不错的。因为c++/cli可以使用托管对象。所以无形中非托管 (unsafe)部分的代码量会减少。 以前我们的使用仅仅局限于api的调用。和一些计算方面。这些相对较易排查。

 

 

对于是否要是用c++/cli。我觉得 首先必须要有人对c++和.net都有些了解。如果没有,最好不要使用。

 

c++/cli的开发效率不高,所以应尽量减少在代码中的比例。

分享到:
评论

相关推荐

    Ecma-C++/CLI

    ### Ecma-C++/CLI 实现规范解析 #### 标题与描述概述 标题“Ecma-C++/CLI”及描述“托管C++实现规范,支持托管C++开发!”明确了本标准是关于托管C++(C++/CLI)语言的一个实现规范。C++/CLI是一种结合了传统C++...

    C++/CLI Standard

    - **委托**:讨论 C++/CLI 中委托的定义和用途。 - **原生类与引用类**: - **文字字段**:介绍声明和使用文字字段的方法。 - **只初始化字段**:解释只初始化字段的特性和使用场景。 - **函数**:探讨 C++/CLI ...

    C++/CLI 规范英文版

    ### C++/CLI 规范知识点解析 #### 一、引言 《C++/CLI 规范英文版》是一份详细介绍了C++/CLI语言特性和规范的技术文档。C++/CLI是一种混合型编程语言,它允许程序员在C++语法的基础上编写面向对象的代码,并与.NET...

    vc++2005微软讲师讲解

    - **C++/CLI中的模运算**:在C++/CLI中,模运算符`%`的用法与原生C++相同,即`a % 2`表示取余操作。编译器会根据上下文判断其用途。 - **C++与C#的区别**: - C++/CLI更偏向于性能敏感的应用程序,支持编译期模板等...

    C#调用C++(包括C++的opencv)

    P/Invoke允许C#代码直接调用非托管(即C++)代码的DLL,而C++/CLI则为C++提供了.NET兼容性,使得C++代码可以直接与.NET组件交互。 1. **生成C++ DLL**: - 使用C++创建动态链接库(DLL)是第一步。在Visual Studio...

    c#调用c++,c++转换工具

    在编程领域,C#和C++是两种不同的编程语言,它们有着各自的特点和用途。C++是一种静态类型的、编译式的、通用的、大小写敏感的、不仅支持过程化编程,也支持面向对象编程的程序设计语言。而C#是由微软开发的一种现代...

    用Visual C++2008实现遗传算法

    通过上述内容的学习,读者不仅可以了解到遗传算法的基本原理及其在Visual C++ 2008 中的具体实现方法,还能掌握使用C++/CLI和MFC开发应用程序的基础知识。这对于提升编程技能和解决实际问题都非常有帮助。

    C,C++发展历程

    1. 不同C++标准的关键特性:要求学生识别并理解每种标准引入的新特性及其用途。 2. 面向对象编程:包括封装、继承和多态的基本概念和实践。 3. 模板和泛型编程:如何使用模板来编写通用代码,以及STL(标准模板库)...

    Atomineer Pro Documentation Trial 9.44 Cracked

    请勿用于商业及非法用途,如产生法律纠纷与本人无关 AtomineerUtils是国外的一款用于生成源代码注释的一款VS插件,官方网站:http://www.atomineerutils.com/products.php 通过链接,可以看出这款插件的功能十分强大...

    C# to C++ transpiler (Cs2Cpp) (Powered by Roslyn).zip

    5. **.NET与C++/CLI**:如果Cs2Cpp不仅仅转换语法,还处理.NET框架的特性,那么可能涉及C++/CLI,这是一种扩展的C++版本,用于与.NET Framework交互。 6. **性能与兼容性**:由于C++比C#更为底层,转换后的代码可能...

    Atomineer Pro Documentation Trial 9.36 Cracked

    请勿用于商业及非法用途,如产生法律纠纷与本人无关 AtomineerUtils是国外的一款用于生成源代码注释的一款VS插件,官方网站:http://www.atomineerutils.com/products.php 通过链接,可以看出这款插件的功能十分强大...

    Atomineer Pro Documentation Trial 9.32 Cracked

    不像GhostDoc那样,只支持C#,这款插件,支持C、C++、C++/CLI、C#、Java语言等,由此可以看出其强大,注释的风格可以灵活配置。 虽然它功能十分强大,但是由于是收费的软件,所以当使用超过30天后,就无法再继续适用...

    Atomineer Pro Documentation Trial 9.30 Cracked

    通过链接,可以看出这款插件的功能十分强大,不像GhostDoc那样,只支持C#,这款插件,支持C、C++、C++/CLI、C#、Java语言等,由此可以看出其强大,注释的风格可以灵活配置。 虽然它功能十分强大,但是由于是收费的...

    VC++2002 编译器

    - **C++/CLI**:新增了对C++/CLI的支持,这是一种混合型语言,可以在.NET Framework中编写原生代码和托管代码。 ##### 4. 性能优化 - **编译速度**:优化了编译速度,提高了开发效率。 - **内存管理**:改进了内存...

    SkeletonBasics-WPF.rar_Visual_C++_

    因此,这个项目可能是使用C++/CLI实现的,或者至少包含了一些与C++/CLI相关的代码。 在压缩包内的《SkeletonBasics-WPF》文件夹中,我们可以预期找到以下内容: 1. **源代码文件**:可能包括`.cpp`和`.h`文件,...

    Visual C++ 教程源代码

    Visual C++是微软公司开发的一款强大的集成开发环境,它支持C、C++以及C++/CLI等多种编程语言,尤其在Windows平台上的应用程序开发中占据重要地位。 C++是一种静态类型的、编译式的、通用的、大小写敏感的、不仅...

    一个把dll反编译成C#,VB,C++源代码的利器

    Reflector支持多种编程语言的源代码输出,包括C#、Visual Basic .NET (VB) 和C++/CLI,这为开发人员提供了极大的灵活性。 反编译在软件开发中有多种用途。首先,它是进行逆向工程的重要工具,帮助开发者了解未知库...

    GhostDoc v4.9.15086

    GhostDoc是一款广受欢迎的Visual Studio插件,专为提升软件开发效率而设计,特别是对于C#、VB.NET和C++/CLI等支持XML注释的语言。它的主要功能是自动生成符合XML注释标准的文档,这在维护代码质量和提高团队协作效率...

    《Visual C++ 2010入门经典》文字版[PDF]

    它不仅涵盖了Visual C++ 2010的全部基础知识,而且还详细介绍了标准C++语言和C++/CLI的相关知识。 该书的目标读者是对C++感兴趣的学习者,特别是希望通过Visual C++ 2010来学习和实践C++编程的初学者。 #### 三、...

Global site tag (gtag.js) - Google Analytics