我已经很长一段时间C#和.NET开发者,和已经玩与学习c ++的想法。

其中一个主要的原因我一直在考虑这一点,是C如何更快++可超过使用.NET Framework的应用程式。但我是对的假设,如果我写一个C ++应用程序在Visual Studio中,和/或参考.NET库在C ++应用程序,那C ++被转换MSIL(就像C#) - 并为此我失去任何好处从在它编码?

所以我的问题是真的这样:一个是应用程序中引用的“传统”的方式编写.NET程序集的C ++组件,或comiled成MSIL

有帮助吗?

解决方案

那么这是比这更复杂一些。 实际上,有两种完全不同版本的.NET的支持C ++。

在旧的,C ++托管扩展,是在Visual C ++ 2002/2003唯一可用的选项。这是在选项/ CLR下新的编译器可供选择:oldSyntax。这是有点笨拙,因为它力图用标准C ++集成,因此所有新的关键字(而且有很多很多)与双下划线等代码通过这个编译器生成的前缀是本地和MSIL代码混合,配成IJW“这只是工作”。

在新的,称为C ++ / CLI,是在Visual C ++ 2005和较新的可用的一个干净的新的语言。最重要的是,它支持代码生成的几种模式。 的/ CLR选项再次产生的天然和MSIL代码IJW混合物。 / CLR:在纯结果的管理专用组件,尽管它可能翻译天然类型成相应的.NET结构。代码因此可能不是类型安全的,可以使用指针运算,很像C#与/不安全。 和最严格的选项是/ CLR:安全的,这产生类型安全,可验证MSIL只组件,酷似C#编译器(无/不安全的,这是)

有关MC之间的差异++和C ++ / CLI,请参阅维基

有关的编译器开关的说明,请参见 MSDN

PS。在.NET字节码被称为要么MSIL(Microsoft中间语言)或CIL(通用中间语言)。 MIL可以代表媒体集成层,通过WPF和Vista桌面窗口管理器中使用无证低级别的库。

其他提示

这可能是一个好主意,让这些概念是分开的。

首先,C ++是一种语言,它没有指定什么平台应该有针对性什么。原则上,直C ++代码可以编译为本地x86汇编,Java字节码,MSIL或其他任何你愿意想的。相信的Adobe最近提出,其产生的Flash字节码C ++编译器。

其次,随着典型犹豫不决,Microsoft建立两个C ++ - 衍生的语言靶向.NET。首先,他们提出了“C ++托管扩展”。于是他们决定它吸,抛弃了它,并试图假装它不存在。

现在的.NET风格的C ++他们最好的选择被称为C ++ / CLI,但的它不是C ++ 的。它延伸并在一些非标准的方式改变语言。 (我相信C ++标准委员会的要求下,他们改变以避免混淆的名称。但是,他们没有)

Visual Studio 2005和较新的载体C ++ / CLI。 (在 “添加项目”,他们在Visual C ++列出 - > CLR)

然而的(你不认为这是简单的,不是吗?),微软做了一遍。指定C ++ / CLI,这实际上是在整合C ++ CLI与合理精心设计的尝试之后,他们意识到,几乎没有人使用它! 事实证明,即使是C ++程序员通常喜欢使用,当他们在.NET正在努力C#和适当的,原生的C ++否则。

所以,现在,他们注重的本地的C ++和.NET简单和更强大之间进行互操作。然而,C ++ / CLI是不太可能消失。它的工作原理,以及在某些情况下,它是非常有用的。这只是不是C ++ - 杀手他们最初希望

的Visual Studio(因为永远)也支持本地C ++的应用程序,编译为x86机器代码,由.NET玷污。这些将在下面的Visual C“添加项目”对话框中列出++ - >的Win32

所以,如果你想学C ++,你有两个选择: 学习C ++ / CLI,这限制了你哪些是的,生成的,而不是本机代码MSIL一个MS-唯一的语言,并需要.NET运行,一般是不值得的麻烦,因为如果你要采取的依赖在.NET上的反正的,为什么不能在C#写?

或者学习正确的C ++,这是从.NET完全独立的,并且不能直接引用.NET组件。

关键外卖的一点是,他们是独立的语言。或者编译为C ++ / CLI,这意味着,编译器允许您引用.NET组件,以及将生成MSIL代码,或编译为C ++,在这种情况下,.NET世界上不存在。

最后,一个值得注意的问题。尽管我的措辞以上(“正确的C ++”和“.NET污点”),C ++是不是“好”。在许多情况下,它是不是更快无论是。 C ++有潜在要快些,但它取决于很多更多关于编程。

C#编译器会变成相当多的东西进入相当有效的代码。 在另一方面C ++,是充满陷阱,这将使您的代码的比等效C#。

http://blogs.msdn.com/ricom/存档/ 2005/05/10 / 416151.aspx 和博客文章引用它是值得的人好奇的写在两种语言类似代码的性能读取。

有只有一个区域,其中C ++的应用将是始终如一更快,这是在启动时间。 .NET应用程序可能必须装载在.NET框架和JIT MSIL代码,其中本机应用程序...只是开始。

但除此之外,它可能是一个错误的假设,C ++会更快。它的可以的是,因为它给你多一点控制。但通常,这只是意味着编译器能够少救你脱离你在你的代码中创建的低效率。

是的管理VS一个不错的(如果日)讨论非托管C ++。

在坚果壳,C ++可被任一管理(编译为MIL)或非托管(编译为本机代码)。

不管你的理由为希望学习C ++是一件好事,知道更多的语言,因为它拓宽你的头脑所以,学习C ++本身就是一种宝贵的一课。

使用C ++您可以运行它作为.NET应用程序C ++ / CLI或天然。它只是在Visual Studio中的一个编译器开关但有相当多的两者之间的语法差异。我个人认为学习既味道是非常有用的。

这在您的项目选择要看一下就要求如如果你的程序需要相互作用的其它管理模块,如C#编写的模块优选使用C ++ / CLI,以避免管理和非托管代码之间的一些切换开销。

C ++组件不能方便地引用的.Net组件(你需要使用COM)。托管C ++编译成CIL并且具有相同的性能配置到C#。

C ++是同级别optomization的大多数代码快约10%,但是C#需要半编写和调试因此对于同样多的时间,我会说,你可以到位将使C#更快optomizations的时间。 ..

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top