C++/CLI有什么意义?

Ear*_*rlz 4 .net c++-cli

我想知道C++/CLI的用途是什么.在我看来,它基本上是在.Net上运行的C++,我在这个想法中错了吗?到底有什么好处呢?为什么不使用C#或其他一些真正的托管语言呢?

Jar*_*Par 11

以下是C++/CLI相对于简单C++或C#的一些优点

  • 它是编写在本机代码和托管代码之间进行交互的大型组件的一种很好的语言.
  • 提供从纯粹的本机C++代码库到纯粹的托管代码库的快速(呃)转换路径.没有C++/CLI,您最好的选择就是重写


Aar*_*ght 10

C++/CLI有一些C#没有的有趣内容:

  • 强烈拳击.如果框中intobject在C#中,你失去对原始类型是什么样的任何信息.不是C++/CLI中的情况.

  • 析构函数和终结符之间的区别.在C#中,您必须手动实现IDisposable并记住调用Dispose.在C++/CLI中,您只需将清理代码放入析构函数中(它会自动编译成Dispose方法),并将仅托管清理代码放入终结器中.

  • 变量的堆栈和堆语义之间的区别.Stack是默认的,并且堆栈分配的引用类型将自动被销毁(处理) - 您不必记住delete它们,只是让它们超出范围.总而言之,在C++/CLI中处理非托管资源比使用任何其他.NET语言要容易得多.

  • 函数指针.现在这与C#中的匿名委托和lambda语法没什么区别,但早在2005年,这是一个大问题.

  • 访问CLR中实现的所有访问修饰符.您可以为同一个程序集外部程序集明确指定public,protected或private .所有你在C#中有(较明显等public,protected,private)是internalprotected internal改性剂,前者意为"公共的内部,外部私有",后者意为"大众内部,外部的保护".在C++中,您可以创建一个类"protected AND internal",这意味着该成员只能在同一个程序集中的派生类中访问.

  • 价值类.很奇怪,但可能对某人有用!

还有的这一切和更多更详细的解释在这里.总而言之,其他托管语言--C#,VB.NET,F#等 - 实际上并不能让您完全访问CLR可以执行的所有操作,更像是其中的90%.C++/CLI允许您在CLR规范中执行您想要的任何操作.