我想知道C ++ / CLI的用途是什么。在我看来,它基本上是在.Net上运行的C ++,我在这个想法中错了吗?到底有什么好处呢?为什么不使用C#或其他一些真正的托管语言呢?
答案 0 :(得分:11)
C ++ / CLI有几个优点,而不仅仅是C ++或C#
答案 1 :(得分:10)
C ++ / CLI有一些C#没有的有趣内容:
强力拳击。如果您在C#中将int
打包到object
,则会丢失有关原始类型的信息。不是C ++ / CLI中的情况。
析构函数和终结符之间的区别。在C#中,您必须手动实施IDisposable
并记得致电Dispose
。在C ++ / CLI中,您只需将清理代码放入析构函数中(它会自动编译成Dispose
方法),并将仅托管清理代码放入终结器中。
变量的堆栈和堆语义之间的区别。 Stack是默认值,堆栈分配的引用类型将自动被销毁(处置) - 您不必记住delete
它们,只是让它们超出范围。总而言之,在C ++ / CLI中处理非托管资源比使用任何其他.NET语言要容易得多。
函数指针。现在这与C#中的匿名委托和lambda语法没什么区别,但是在2005年这是一件大事。
访问CLR中实施的所有访问修饰符。您可以为同一个程序集和外部程序集明确指定public,protected或private。 C#中的所有内容(明显的public
,protected
,private
除外)都是internal
和protected internal
修饰符,前者意为“公共内部,私人外部“和后者意味着”公共内部,外部保护“。在C ++中,您可以将类设置为“protected AND internal”,这意味着该成员只能在相同程序集中的派生类中访问。
价值类。很奇怪,但可能对某人有用!
对所有这些以及更多here有更详细的解释。总而言之,其他托管语言--C#,VB.NET,F#等 - 实际上并不能让您完全访问CLR可以执行的所有操作,更像是其中的90%。 C ++ / CLI允许您在CLR规范中执行您想要的任何操作。
答案 2 :(得分:4)
C ++ / CLI的几个原因:
微软确实在C ++ / CLI中做了一些我觉得很有意思的事情,即使你对.NET不感兴趣:他们处理以对现有C ++影响最小的方式添加新关键字的方式
有关详细信息,请参阅Sutter's article。
答案 3 :(得分:2)
天哪,当你需要做一些高性能的事情(例如用SIMD进行图像处理),与原生C ++(例如OpenGL代码,现有的遗留C ++代码)互操作或者看起来很聪明时,我已经使用了C ++ / CLI加载。
ok;)也许不是最后一个
放弃对它的支持将是一个巨大的损失IMO ..