从C#移动到C++(加上在同一解决方案中使用两者)

Moving from C# to C++ (plus working with both in same solution)

本文关键字:解决方案 移动 C++      更新时间:2023-10-16

这是一个非常普遍的问题。我是一个自学成才的程序员,用C#编程。如果我知道C++,我想做的项目会变得容易得多(从总体上来说)。从C#迁移到C++有多容易?有什么陷阱我应该注意吗?如果我使用的是VS2010,我能用C#和C++编程吗?

从C#迁移到C++并不容易。基本语法可能看起来相同(例如if,for…),但存在深刻的差异,例如RAII模式和堆栈语义变量,当它们超出范围时会调用其析构函数,等等,这些变量在C#中不存在。

此外,C#使用了一个不确定的垃圾收集器(这对内存资源来说是可以的,但对其他类型的资源来说是无用的)。相反,使用现代C++,您可以使用模板和智能指针(如std::/boost::*shared_ptr*),这允许您进行确定性引用计数的"垃圾收集",这非常有效,对内存和非内存资源(如文件句柄、套接字、纹理…)都有效。

此外,C#泛型与C++模板非常不同(C++模板功能非常强大,并且允许高级编程,称为模板元编程)。

在VS2010中,您可以拥有一个同时托管C++和C#项目的解决方案。要在两个世界(C++的原生世界和.NET/C#的托管世界)之间进行通信,可以使用C++/CLI作为一种桥接层。

在Windows8中,应该引入一种新技术,称为WinRT(基于COM),它允许语言间通信。在这种情况下,您可以将C++与WRL(一个基于模板的库)或C++/CX语言扩展一起使用,以构建可以从C#和.NET.使用的C++组件

快乐的学习。

我从c++到c#走了另一条路。从很多方面来说,这是一种解脱。C++比C#有更多的规则,尤其是在内存分配方面。语法也可能具有挑战性,并且很容易进入越界内存。然而,C++更适合系统级编程,但强大的能力带来了巨大的责任。

我建议先找一本Scott Meyer的《高效C++》,然后从头到尾读。这是我所知道的最好的资源,可以正确地掌握基本知识,毫无疑问,即使是作为一名"经验丰富"的c++开发人员,也可以提高我正在生成的代码的质量。然后获取一个单元测试框架,并查看一个c++kata(在本例中是一个xcode项目,但应该仍然有用)。熟悉标准模板库,其中包含许多有用/高效的容器、算法等代码/类。

最后,祝你好运。学习一门新语言总是一项挑战,可能会让人望而却步,但回报通常是值得的。

我能在两个C#中编程(不是在同一个类中,而是在同一项目中)吗和C++?

答案是否定的,你不能。如果您使用托管C++&C++但若你们使用C#,那个么你们就不能在同一个项目中使用C#和C++代码

从C#移动到C++有多容易?`

这有点主观,但在我看来,这将是非常艰难的一步。C++是一种不同的语言,所以它将像学习一种新语言一样困难:)同样,它是主观的,所以我不会详细介绍

既然您使用的是.NET,我想您使用的应该是Visual Studio?

使用/clr编译器选项,在同一程序中组合C#和C++非常容易。您的C++代码既可以包括普通的、符合标准的C++类,也可以包括为从C#中使用而设计的ref class.NET对象。两者是分开的,但可以通过从ref class到本机class的指针以及从本机classref classgcroot模板来相互访问。

请注意,我说的是"在同一个程序中",而不是"在相同的项目中


注意,您可能会发现我编写的这个智能指针类很有用,它使ref class.NET对象中的本机class对象的使用变得更加容易。

  • 用于C++/CLI的scoped_ptr(确保托管对象正确释放所拥有的本机对象)

相关文章: