可以使用/ clr:pure重新编译本机C ++项目

时间:2014-07-17 21:46:03

标签: visual-c++ c++-cli

您好我正在学习c ++ / cli的过程,并为此阅读了专家c ++ / cli。 在书中作者声明“编译器选项/ clr:pure仍允许你 将现有的C ++代码编译为托管代码(源代码兼容性)“。这是否意味着现有的本机代码可以使用/ clr:pure?

重新编译CRT堆中初始化的对象?

更新1:例如,可以使用/ clr:pure?。

编译B类
Class A {

 Public :
 A()
 {

 }

 ~A()
 {

 }

 void Foo()
 {
 }

};


Class B {

 Public :

 A* test;

 B()
 {
   test = new A();
   test->Foo();
 }

 ~B()
 {
   delete test;
 }

};

MSDN声明

  

纯程序集(使用/ clr:pure编译)可以包含native和   托管数据类型,但只有托管函数

  

/ CLR:纯

     

生成Microsoft中间语言(MSIL) - 仅具有本机可执行代码的输出文件。但是,它可以包含编译为MSIL的本机类型。

从我的理解(我可能在这里错了)test = new A();生成本机代码因此无法使用/ clr:pure编译。如果我错了可以任何人给我一个例子

  1. 本机功能(因为MSDN仅表示托管功能 允许)
  2. 可以使用/ clr和。编译的类的示例     不是/ clr:pure
  3. 由于

1 个答案:

答案 0 :(得分:4)

当然,这是可能的,任何符合C ++ 03标准的C ++代码都可以转换为MSIL并在运行时附加到机器代码。

然而,这是一个相当无意义的事情,你没有得到可验证的代码。该程序与原生C ++一样“不安全”,指针仍然是像往常一样破坏内存的指针。你不会得到垃圾收集器的爱。你得到的唯一好处是架构独立性。减去最重要的是编译时优化器。 MSIL得到了优化,但这是通过在运行时花费很少时间的实际约束来完成的,它几乎不能做好工作。在想要的列表上添加自动矢量化和自动并行化等内容。

使用/ clr:pure和/ clr:safe仅在2005年有意义,Stanley Lippman等人致力于使C ++成为托管.NET世界中的一等公民。这并不是那么好,至少因为每个人在完成时都会退出,语言现在被假定为互操作语言。它非常非常好。这些选项位于已弃用的列表之上,只有plain / clr才会有未来。