使用C++/CLI进行100%托管开发有什么好处?

Ðаn*_*Ðаn 8 .net c# c++-cli

使用C++/CLI 进行100%托管开发有哪些优点(可能存在的缺点列表)(即使用/ clr:safe编译,"生成...程序集,就像用C#编写的那样") )?尤其是当compard到C#(注意:C++/CLI:在C#中的优势它有什么优势超过任何标准C++或C#中使用C++/CLI?大多是有关管理/非托管互操作).

例如,这里有几个我的头顶:

  • C++ - 托管类型的样式引用,不像完整的非可空引用那样优雅,但总比没有好或使用解决方法.

  • 模板比泛型更强大

  • 预处理器(这可能是一个缺点!,但宏可用于代码生成)

  • 引用类型的堆栈语义 - 自动调用IDisposable :: Dispose()

  • 通过C++析构函数更容易实现Dispose()

C#3.0添加了自动实现的属性,因此不再具有C++/CLI优势.

cmw*_*cmw 6

我认为最大的一个优势是托管/非托管互操作.在不使用C#或其他.Net语言的情况下编写纯托管C++/CLI(至少对我而言)似乎完全忽略了这一点.是的,你可以做到这一点,但你为什么要这样做.

如果您要编写纯托管代码,为什么不使用C#.特别是(如nobugs所说)如果VS2010放弃了对C++/CLI的IntelliSense支持.同样在VS2008中,用于C++/CLI的IntelliSense不如C#IntelliSense好; 所以从开发人员的角度来看,在C#中工作/探索/重构比在C++/CLI中更容易.

如果你想要列出一些C++的好处,比如预处理器,堆栈语义和模板,那么为什么不使用C++呢?

  • C++/CLI对于除了互操作之外的任何东西都很糟糕.如果您想编写托管程序集,那么使用C#的注释就可以解决问题. (3认同)

Han*_*ant 5

奇怪,我喜欢C++/CLI,但你确切地列出了我不喜欢的功能.我的批评:

  • 好的.但偶然使用帽子非常普遍,在没有警告的情况下获取值类型的值.没有办法诊断这个错误.
  • 高价的电源,您编写的模板不能用于任何其他.NET语言.如果有的话,它会恶化C++模板导出问题.STL/CLR的完全失败也值得深思.
  • 呃,不.
  • 这是IMO的一个严重错误.如第一个项目中所述,已经很难避免意外拳击的问题.堆栈语义使得任何初学程序员都很难对其进行排序.这是一个安抚C++程序员的设计决定,没关系,但using语句是一个更好的解决方案.
  • 不知道如何更容易.GC.SuppressFinalize()调用是自动的,就是这样.任何人编写终结器都是非常罕见的,但您无法避免自动生成的代码进行调用.这是低效的,违反了"你不为你不使用的东西付费"的原则.除此之外,编写析构函数还会强制自动生成默认终结器.如果您忘记或省略使用析构函数,那么您永远不会使用它并且不希望被使用.

嗯,这或许都是非常主观的.VS2010将会出现死亡之谜,它将在没有智能感知支持的情况下发布,用于C++/CLI.

  • @Russ - 不适用于C++,对于C++/CLI,正如我在帖子中明确指出的那样.链接:http://www.codeguru.com/forum/showthread.php?t = 477959给我点回来,该死! (6认同)

Arv*_*rve 3

在 C++/CLI 中,您可以在类之外定义函数,但在 C# 中则不能这样做。但不知道这算不算优点