它 [Visual C++] 是做 C 和 C++ 的吗,每个都有不同的编译器吗?
有一个编译器(或至少一个前端程序)可以同时执行 C 和 C++(但与某些人认为的相反,它以单独的 C 模式运行,它将拒绝特定于 C++ 的构造)。
有没有办法开发在 Visual C++ 中非托管运行的代码,或者在 Visual C++ 中开发的任何东西都需要 .NET 才能运行?托管与非托管是否归结为使用的编译器?
是的,用 C 或 C++ 开发的本机代码可以/将在没有 .NET 的情况下运行。有一种混合(C++/CLI),有点像 C++,但它产生的东西需要 .NET 才能运行。我不会花很多时间/精力去担心它——事实上,我通常会完全忽略它的存在。
如果运行编写和运行托管 Visual C++ 代码,有什么我可以在 VC++ 中做而我在 C# 中做不到的事情吗?
是和不是。C++/CLI 使与本机代码的互操作比尝试直接从 C# 使用它要简单得多——这基本上是我建议使用它的唯一情况(至少在我最后一次查看时,这几乎是MS也推荐了什么)。
除了为自己而学习(这很棒)之外,我是否会通过学习 VC++ 获得任何见解,如果是这样,我应该从哪里开始?
你的意思是学习真正的 C++,还是微软的 C++/CLI 东西?正如上面所指出的,C++/CLI 不是鱼也不是鸟,我通常会避免它。
真正的 C++ 则完全不同。使用它的原因有很多:
- 模板:找出 C#“泛型”在模仿方面做得不好。
- 本机代码:有助于提高速度,消除对 .NET 的依赖。
- 一些(但不是全部)标准库的设计要好得多。
- 把最好的留到最后:RAII 管理各种资源,而 GC 只管理内存。
就个人而言,我认为您过于关注“一个编译器”与“两个编译器”——这几乎是毫无意义的区别。真正的问题不是涉及多少编译器,或者哪个编译器生成什么代码,而是如何完成你想要的——至少如果你在 VS 内部工作,它通常会整理出诸如哪个编译器之类的事情调用特定的源代码。
让这被视为一种推销(或类似的东西),我觉得有必要指出,与 C# 相比,C++ 并不全是奇迹和轻巧。举个例子,C++ 并不真正支持反射,这使得有些东西比 C# 更笨拙。其他一些领域(例如,模板元编程)是可能的,但可能难以理解并且经常涉及真正可怕的语法。然后有一个简单的事实,即 C++ 的编译时间几乎总是比 C# 慢很多。