C++/CLI:优于C#的优势

Lop*_*per 9 c# c++-cli declaration

托管C++/CLI与C#相比有什么主要优势吗?绝对不是我想的语法,因为C++/CLI中的以下代码真的很难看,

C++/CLI代码:

[Out]List<SomeObject^>^% someVariable
Run Code Online (Sandbox Code Playgroud)

比较上面的C#代码:

out List<SomeObject> someVariable
Run Code Online (Sandbox Code Playgroud)

出于好奇,与上面相比,C++/CLI中的语法更加丑陋.

phi*_*red 13

它几乎完全是一种互操作性语言 - 既允许.Net代码访问传统的C++库,也适用于扩展的现有(本机)C++代码库,可以访问.Net库(以及这些主题的一些变体).

虽然它可以编写仅以C++/CLI完全成熟的应用程序,它甚至给你一些语言功能没有纯C++中(如垃圾回收),我怀疑有多少人谁也真正做到这一点.如果你已经远离纯粹的C++并且没有与.Net互操作的目标,那么可能有更多自然的选择(例如DScala,取决于你想要进入的方向).

同样,从纯C#转向C++/CLI可以说可以带来C++模板的优势,但是这种需求很少会导致你采取这一步骤.


小智 12

与本机C++代码更容易的互操作是一个优势.

它是否具有主要优势是主观的.

除非你想与现有的原生C++代码混合使用,否则你可能会更好地使用C#.

  • 它仍然是主观的.如果您需要使用现有的DLL,您可以选择使用C#和使用P/Invoke与现有代码进行互操作.无论是"主要"优势还是"次要"优势,让C#更容易互操作与"主要"优势或"次要"优势完全取决于提出问题的人. (3认同)

Nik*_*iki 6

我可以想到使用C++/CLI的3个主要原因:

  1. 您已经拥有一个大型C++项目,并希望在其中使用.NET(无论您是否希望将来完全迁移它)
  2. 您想要使用用C或C++编写的库.对于简单的库,您可以使用C#/ PInvoke,但是例如,如果libary带有复杂类型的系统,那么最好创建C++/CLI包装器而不是在C#中重新创建类型系统
  3. 项目中的部件最好用C++编写.例如,如果您正在进行语音识别或图像处理,C++可能更适合于该任务.


Ben*_*igt 5

能够直接使用本机头文件是一个巨大的优势,但不是唯一的.

堆栈语义比C#为IDisposable管理提供的任何东西都要好得多.C++/CLI有一个统一的语法,用于正确管理变量IDisposable和不变量,包括局部变量和成员字段.比较:

ref class MyClass
{
   FileStream fs;
}
Run Code Online (Sandbox Code Playgroud)

VS

class MyClass : IDisposable
{
  FileStream fs;

  void IDisposable.Dispose() { Dispose(true); }
  ~MyClass() { Dispose(false); }

  public virtual void Dispose(bool disposing) { if (disposing) fs.Dispose(); }
}
Run Code Online (Sandbox Code Playgroud)

现在哪种语言看起来很难看?

再就是模板interior_ptr,#define,原生的DLL导出,指针到成员,以及其他可能几件事我忘了.