我在SO中找到的最接近的问题是这个问题,但回答实际上是在比较C++/CLI和C#之间的优势。
我需要了解C++/CLI相对于标准C++的优势。
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包装器来实现。
在之前的回答中,我没看到提到的一件事(可能是因为这更像一个缺点,但它是一个相关的考虑),那就是C++/CLI往往会被次等对待。微软曾经把它推销成几乎是C++的替代品,他们希望本地开发人员转向.NET,并通过编写C++/CLI而不是C++来实现这一点。
现在,他们已经放弃了这个想法,将C++/CLI降级为Interop语言。微软建议您在需要混合本地C++和.NET代码时使用它,您可以使用C++/CLI作为它们之间的"桥梁",而C++再次成为一流的语言。
C++/CLI在某些方面也已经落后:
因此,如果您想编写.NET代码,请使用"真正的".NET语言,如C#。 如果您想编写C++,请使用"真正的"本地C++。 如果您想混合这两种语言,请使用C++/CLI编写Interop代码。
主要的好处是可以访问 .net 框架和其他使用 .net 语言编写的代码。
这里是Bjarne Stroustrup对C++/CLI的看法。我很惊讶,因为上一次我读到它时,它更加消极。 (似乎微软现在已经同意了他的请求,在所有文档中保持C++/CLI和ISO C++之间的明确区分。)
它让你可以访问.NET基类库中的大量功能,以及你已经在C++中实现的功能。
如果你愿意,你可以将大部分代码放在纯C#程序集中,并仅在必要时使用C++。