这是一个非常普遍的问题.我是一名自学成才的"程序员",用C#编程.如果我了解C++,我想要处理的项目将变得更加容易(在宏大的计划中).从C#迁移到C++有多容易?我应该注意哪些陷阱?如果我使用VS2010,我可以在C#和C++中编程(不是在同一个类,但是同一个项目中)吗?
小智 22
从C#迁移到C++并不容易.基本语法可以看起来相同(例如,如果,for ...),但存在很大的差异,例如RAII模式和堆栈语义变量,当析构函数超出范围时调用它们等等在C#中不存在.
此外,C#使用非确定性垃圾收集器(可以用于内存资源,但对其他类型的资源无用).相反,使用现代C++,您可以使用模板和智能指针(如std ::/boost ::*shared_ptr*),它们允许您使用确定性的引用计数"垃圾收集",这非常有效,并且对于内存和非内存资源(如文件句柄,套接字,纹理......).
此外,C#泛型与C++模板非常不同(C++模板非常强大,允许高级编程称为模板元编程).
在VS2010中,您可以拥有一个托管C++和C#项目的解决方案.要在两个世界(C++的本地世界和.NET/C#的托管世界)之间进行通信,您可以使用C++/CLI作为一种桥接层.
在Windows 8中,应引入一种称为WinRT(基于COM)的新技术,该技术允许语言间通信.在这种情况下,您可以将C++与WRL(基于模板的库)或C++/CX语言扩展一起使用来构建可以从C#和.NET使用的C++组件.
快乐学习.
我是从c ++到c#的另一种方式.在许多方面,这是一种解脱.C++比c#有更多的规则,特别是在内存分配方面.语法也很具挑战性,很容易徘徊在超出界限的内存中.然而,C++更适合于系统级编程,但强大的功能带来了巨大的责任.
我建议先抓一本Scott Meyer的Effective C++,然后阅读封面.这是我所知道的最好的资源,用于使基础知识正确无误地提高我生成的代码的质量,即使是作为"经验丰富的"c ++开发人员.然后获取一个单元测试框架并查看一个c ++ kata(在这种情况下是一个xcode项目但仍然有用).并熟悉标准模板库,其中包含许多用于容器,算法等的有用/高效的代码/类.
祝你好运.学习一门新语言总是一个挑战,而且可能令人生畏,但收益总的来说是值得的.如果没有别的,你会用新的眼睛看到你的c#代码.
我可以在C#和C++中编程(不是在同一个类,但是同一个项目中)吗?
答案是不,你不能.如果您使用托管C++和C++,则可以.但是如果您正在使用C#,那么您不能在同一个项目中使用C#和C++代码
从C#迁移到C++有多容易?`
这有点主观,但在我看来,这将是一个非常艰难的步骤.C++是一种不同的语言,所以它会像学习一门新语言一样难:)再次它是主观的所以我不会详细介绍
既然你正在使用.NET,我认为你正在使用Visual Studio?
使用/clr编译器选项在同一程序中组合C#和C++相当容易.您的C++代码既可以包含普通的,符合标准的C++类,也可以包含ref class为C#使用而设计的.NET对象.这两个是分开的,但可以通过指向ref class原生的指针class和gcroot从原生class到的模板相互访问ref class.
请注意,我说"在同一个程序中 ",而不是"在同一个项目中 ".您将必须分为两个部分,一个C#项目和一个C++/CLI项目,一个将是另一个加载的DLL.还有一个技巧可以在构建过程中将两者结合在一起,这样你最终得到一个可执行文件,但这比通常值得的更麻烦.
注意,你可能会发现我写的这个智能指针类很有用,它使得.NET对象中的本机class对象的使用ref class变得更加容易.