从C#移动到C++(加上在同一解决方案中使用两者)
Moving from C# to C++ (plus working with both in same solution)
这是一个非常普遍的问题。我是一个自学成才的程序员,用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
的指针以及从本机class
到ref class
的gcroot
模板来相互访问。
请注意,我说的是"在同一个程序中",而不是"在相同的项目中 注意,您可能会发现我编写的这个智能指针类很有用,它使ref class
.NET对象中的本机class
对象的使用变得更加容易。scoped_ptr
(确保托管对象正确释放所拥有的本机对象)
- 运行同一解决方案的另一个项目的项目
- Project Euler问题4的错误解决方案
- 计算每个节点的树高,帮助我解释这个代码解决方案
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- visual c++,如何获取解决方案目录中的代码
- 有没有办法在远程设备上打开和编辑visual Studio 2017解决方案
- C++Matching Brackets 2解决方案不起作用
- 在 ubuntu3 上C++ goto 定义有什么解决方案吗16.04?
- 在 leetcode 上提交解决方案时出现堆栈缓冲区溢出错误
- 我的固定时间步长与增量时间和插值的解决方案是错误的吗?
- 无法在问题解决方案中执行输出逻辑
- 最大的回文产品 - 程序未运行,编写解决方案但无法理解问题
- 从预序遍历构造 bst 的 c++ 和 python 解决方案之间的区别
- 在一个解决方案中针对第三方静态库 (Creo) 的不同版本(版本)进行构建
- 如何巧妙地编写两个函数——一个用于检查是否存在解决方案,另一个用于获取所有解决方案
- 使用 Git 处理 C++ Visual Studio 2019 解决方案的外部依赖项源代码管理的最佳方法是什么?
- 有没有解决方案而不是在C++中移动背包回溯算法
- 将类从应用程序解决方案移动到静态库解决方案会产生无法解决的外部符号链接错误
- 从C#移动到C++(加上在同一解决方案中使用两者)
- 通用转换运算符模板和移动语义:有通用的解决方案吗