ANSI / ISO C ++和C ++ / CLI有什么区别?

时间:2009-12-28 11:39:49

标签: c++ c++-cli

  

由Microsoft创建的基础   它的.NET技术,Common   语言基础结构(CLI)是一种   ECMA标准(ECMA-335)允许   要写入的应用程序   各种高级编程   语言和执行不同   系统环境。符合CLI的编程语言   访问相同的基类库   并且能够被编译成   相同的中间语言(IL)   和元数据。然后IL进一步发展   特别编译成本机代码   到特定的架构。

     

由于这个中间步骤,   应用程序不一定是   从头开始重写。他们的IL只   需要进一步编译成一个   系统的本机代码。

系统环境究竟是什么意思?


此外,在研究Ivor Horton的 Beginning Visual C ++ 2008 时,我注意到他表示可以使用Visual C ++ 2008开发基本上不同类型的C ++应用程序。这些是:

  1. 在一台计算机上本机执行的应用程序,他称之为本机C ++程序。本机C ++程序是用ISO / ANSI语言标准定义的C ++版本编写的。

  2. 也可以编写应用程序,在C ++的扩展版本中,在CLR的控制下运行,称为C ++ / CLI。这些程序被称为 CLR程序,或 C ++ / CLI程序

  3. 那么本机C ++程序和CLR程序是什么意思?他们之间有什么区别?感谢任何专家的帮助。

2 个答案:

答案 0 :(得分:9)

“系统环境”是指Linux,Windows x86,Windows x64等等。请注意他们如何在段落末尾互换使用术语“架构”。


本机C ++程序是您使用标准(ANSI / ISO)C ++并将其编译为.exe的程序。通常,您将针对特定环境进行编译,例如: Windows x86,在这种情况下它无法在Linux下运行,并且可以在Windows x64上的WoW64 emulation layer下运行。值得注意的是,此代码直接在计算机上运行。

C ++ / CLI是一种与标准C ++不同的编程语言。它就像C#或VB.NET一样,运行在微软的 C ommon L anguage I 接口之上。这意味着它可以访问您引用的段落中的所有这些好东西,比如基类库和IL的编译,它允许它在不同的体系结构上运行。但是,就像C#和VB.NET一样,它不能在机器上本机运行。它需要安装.NET Framework; .NET Framework的一部分工作是将C ++ / CLI程序转换为本机程序,这意味着它们对机器的直接访问权限要少得多。

答案 1 :(得分:0)

我变得有点生疏,无法想起“普通”一词究竟出现在普通用语中。我相信它被大量用于简化编程的环境设计人员大量使用,这些环境旨在提供对系统资源的最佳访问,而对编程风格的关注有限。哪个可能随时间而变化,因为本机也可能被称为从用于编程嵌入式系统的高级语言调用的一些汇编程序代码。这就是为什么我避免使用像CLI / CLR这样的操作系统这样的概念,尽管可以在Linux(Mono)或没有OS支持的裸硅上实现常见的时尚(.NET Micro)。

在这样的上下文中,标准C ++遵循本机方法,并且只要可以为其提供编译器和标准库,就可以完全容忍它运行的硬件或OS(或没有OS)。对于任何此类平台,可以轻松地重新编译标准C ++代码,因为它存在C ++编译器。

要称为C ++ / CLI,C ++方言实现需要CLI / CLR支持,当然还有CLI平台,但代码可以在不使用CIL重新编译的情况下移植,并使用标准的,复杂的库和实用程序。但是,初始要求高于标准C ++的情况,在这种情况下,C ++可以起到原生环境的作用。