C++/CLI(先前称为“托管C++”)相对于标准C++有哪些优势?

7

我在SO中找到的最接近的问题是这个问题,但回答实际上是在比较C++/CLI和C#之间的优势。

我需要了解C++/CLI相对于标准C++的优势。


3
它有一个显著的好处,就是只能在被微软支持的平台上进行移植... :/ - JimR
5个回答

13

C++/CLI和Managed C++(或者叫Managed Extensions for C++)是两个不同的东西。Managed C++是先前的版本,存在一些语法上的差异,并且已被弃用,推荐使用C++/CLI。

C++/CLI是ISO C++的一个扩展,因此比较无意义。它允许编写可以在CLR上运行的代码。因此,是否使用该扩展取决于您是否需要编写某些需要与CIL语言(C#)进行接口的C++代码。

例如,如果您需要在.NET应用程序中使用用C或C++编写的旧库,则可以编写一个C++/CLI包装器来实现。


感谢并+1指出C++/CLI与Managed C++不同。那么,我理解的是C++/CLI唯一的优势就是能够在CLR上运行,对吗? - Android Eve
1
是的。C++/CLI 增加了 CLR 兼容性,但牺牲了可移植性。 - Etienne de Martel

11

在之前的回答中,我没看到提到的一件事(可能是因为这更像一个缺点,但它是一个相关的考虑),那就是C++/CLI往往会被次等对待。微软曾经把它推销成几乎是C++的替代品,他们希望本地开发人员转向.NET,并通过编写C++/CLI而不是C++来实现这一点。

现在,他们已经放弃了这个想法,将C++/CLI降级为Interop语言。微软建议您在需要混合本地C++和.NET代码时使用它,您可以使用C++/CLI作为它们之间的"桥梁",而C++再次成为一流的语言。

C++/CLI在某些方面也已经落后:

  • 在Visual Studio 2010中,Intellisense不再适用于C++/CLI。它将在某个时候重新启用,但目前已经消失了。
  • VS2010增加了对C++0x部分支持,而据我所知,不是所有的都适用于C++/CLI。同样,假设微软使这两种语言保持同步,但在将新功能添加到C++语言并在C++/CLI中提供之前,可能会出现延迟。

因此,如果您想编写.NET代码,请使用"真正的".NET语言,如C#。 如果您想编写C++,请使用"真正的"本地C++。 如果您想混合这两种语言,请使用C++/CLI编写Interop代码。


哇!这是一个非常好写且信息丰富的答案。谢谢并点赞(我本来想给+5的,但是SO只允许+1)。 - Android Eve

3

主要的好处是可以访问 .net 框架和其他使用 .net 语言编写的代码。


谢谢,+1。还有其他好处吗?(例如速度、安全性、更快的开发进度等)? - Android Eve
@Android Eve 我想不出其他的了。如果是 ISO C++,那么语言是标准的,定义特性的是平台。 - David Heffernan

3

这里是Bjarne Stroustrup对C++/CLI的看法。我很惊讶,因为上一次我读到它时,它更加消极。 (似乎微软现在已经同意了他的请求,在所有文档中保持C++/CLI和ISO C++之间的明确区分。)


1
链接已经失效了。不管怎样,我并没有在他们的文档中看到他们明确区分的描述... - Deduplicator

1
  • 它让你可以访问.NET基类库中的大量功能,以及你已经在C++中实现的功能。

  • 如果你愿意,你可以将大部分代码放在纯C#程序集中,并仅在必要时使用C++。


谢谢和+1。在速度、安全性、更快的开发进度等方面还有其他好处吗? - Android Eve

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接