Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是C++;转换成MSIL? 我一直是C.NET和.NET开发人员,一直在玩C++学习的思想。 P>这是我一直在思考的主要原因之一,就是使用.NETFramework C++的速度会快得多。但是,假设我在VisualStudio中编写C++应用程序,和/或C++应用程序中的引用.NET库,那么C++中的C++被转换成MSL(就像C语言),那么我会从代码中释放出任何好处吗? P>这是我的问题:应用引用的.NET组件的C++组件是以“传统”方式编译的,还是被合并到MSIL?< P>是一个很好的(如果是过时的)讨论托管的VS和非托管C++的例子。_.net_C++_Compiler Construction_Cil - Fatal编程技术网

是C++;转换成MSIL? 我一直是C.NET和.NET开发人员,一直在玩C++学习的思想。 P>这是我一直在思考的主要原因之一,就是使用.NETFramework C++的速度会快得多。但是,假设我在VisualStudio中编写C++应用程序,和/或C++应用程序中的引用.NET库,那么C++中的C++被转换成MSL(就像C语言),那么我会从代码中释放出任何好处吗? P>这是我的问题:应用引用的.NET组件的C++组件是以“传统”方式编译的,还是被合并到MSIL?< P>是一个很好的(如果是过时的)讨论托管的VS和非托管C++的例子。

是C++;转换成MSIL? 我一直是C.NET和.NET开发人员,一直在玩C++学习的思想。 P>这是我一直在思考的主要原因之一,就是使用.NETFramework C++的速度会快得多。但是,假设我在VisualStudio中编写C++应用程序,和/或C++应用程序中的引用.NET库,那么C++中的C++被转换成MSL(就像C语言),那么我会从代码中释放出任何好处吗? P>这是我的问题:应用引用的.NET组件的C++组件是以“传统”方式编译的,还是被合并到MSIL?< P>是一个很好的(如果是过时的)讨论托管的VS和非托管C++的例子。,.net,c++,compiler-construction,cil,.net,C++,Compiler Construction,Cil,在螺母外壳中,C++可以被管理(编译为MIL)或非托管(编译为本机代码)。p> 嗯,比这要复杂一点。 实际上支持.C++的两种完全不同的.NET版本。p> 旧的,C++的托管扩展是Visual C++ 2002/2003中唯一可用的选项。在较新的编译器中,可以在选项/clr:oldSyntax下使用它。由于它试图与标准C++集成,所以有点笨拙,所以所有新的关键字(其中有很多)都是用双下划线前缀的。等等,这个编译器生成的代码是原生和MSIL代码的混合,称为IJW“它只是工作”。 新的一个叫做C++

在螺母外壳中,C++可以被管理(编译为MIL)或非托管(编译为本机代码)。p> 嗯,比这要复杂一点。 实际上支持.C++的两种完全不同的.NET版本。p>

旧的,C++的托管扩展是Visual C++ 2002/2003中唯一可用的选项。在较新的编译器中,可以在选项/clr:oldSyntax下使用它。由于它试图与标准C++集成,所以有点笨拙,所以所有新的关键字(其中有很多)都是用双下划线前缀的。等等,这个编译器生成的代码是原生和MSIL代码的混合,称为IJW“它只是工作”。 新的一个叫做C++/CLI,是一个干净的新语言,可以在Visual C++ 2005中更新。最重要的是,它支持多种代码生成模式。 /clr选项再次生成本机代码和MSIL代码的IJW混合。 /clr:pure会产生一个仅受管程序集,尽管它可能会将本机类型转换为相应的.net结构。因此,代码可能不是类型安全的,并且可以使用指针算法,很像C#with/unsafe。 最严格的选项是/clr:safe,它生成类型安全的、可验证的仅MSIL的程序集,与C#compiler完全相同(即不带/safe)

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

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


NET字节码称为MSIL(微软中间语言)或CIL(公共中间语言)。MIL可以代表WPF和Vista桌面窗口管理器使用的无文件的低级库。

< P>不管你想学习C++的原因是什么,了解更多的语言总是很好的,因为它拓宽了你的思维,所以学习C++本身就是一个很有价值的课程。p>

C++,可以将其作为.NET应用程序C++或CLI或本地运行。它只是VisualStudio中的一个编译器开关,但是两者之间有很多语法差异。我个人认为学习这两种口味都很有用


在项目中选择哪一个取决于需求,例如,如果您的程序需要与其他托管模块(如用C#编写的模块)交互,最好使用C++/CLI,以避免在托管代码和非托管代码之间进行一些开销切换

将概念分开可能是个好主意

首先,C++是一种语言,它没有指明任何平台应该是什么目标。原则上,直C++代码可以编译成本地X86汇编程序、java字节码、MSIL或任何你想考虑的东西。我相信Adobe最近做了一个C++编译器,它生成Flash字节码。 其次,由于典型的犹豫不决,微软已经创建了两种针对.NET的C++派生语言。首先,他们制作了“C++托管扩展”。然后他们觉得它糟透了,抛弃了它,并试图假装它根本不存在

<> P.>对于.NETSt+C++的最佳选择是C++ + CLI,但不是C++。它以许多非标准的方式扩展和更改语言。(我相信C++标准委员会要求他们更改名字以避免混淆,但他们没有) Visual Studio 2005及更新版本支持C++/CLI。(在“添加项目”中,它们在Visual C++ + CLR)下列出

然而(你不认为这很简单,是吗?),微软又一次这么做了。在指定C++ + CLI之后,实际上这是一个合理的设计,试图将C++与CLI集成,他们意识到几乎没有人使用它! 事实证明,即使C++程序员在使用.NET时,一般都喜欢使用C语言,而适当的,C++则是。p>

现在,他们专注于使本地C++与.NET之间的互操作更简单、更强大。然而,C++/CLI不太可能消失。它是有效的,在某些情况下是有用的。这并不是他们最初希望的C++杀手

VisualStudio(自永久)还支持本地C++应用程序,编译为x86机器代码,未被.NET污染。在Visual C++ -Win32 .</P>中的“添加项目”对话框中列出了这些。 如果你想学习C++,你有两种选择: 学习C++/CLI,它将您限制为只使用MS的语言,是的,它生成MSIL而不是本机代码,并且需要运行.NET,通常不值得费心,因为如果您要依赖.NET,为什么不使用C#编写呢

<>或学习正确的C++,它完全与.NET分离,不能直接引用.NET程序集。

关键的一点是它们是独立的语言。要么编译为C++ + CLI,要么编译器允许您引用.NET程序集,并生成MSIL代码,或者编译为C++,在这种情况下.NET世界不存在。 最后,请注意。尽管上面提到了“正确的C++”和“没有.NET的污染”,但是C++并不是“更好”。在许多情况下,它也不是更快。C++有更快的速度,但它更多地依赖程序员。 C#编译器将把几乎所有东西转换成合理高效的代码。 另一方面,C++中的缺陷会使代码比等效的C慢。