-1

我主要是一名 C# 开发人员,Visual Studio 中 Visual C++ 的存在让我感到困惑。

我有以下问题:

  • 它是否使用 C 和 C++,是否有不同的编译器?
  • 有没有办法开发在 Visual C++ 中非托管运行的代码,或者在 Visual C++ 中开发的任何东西都需要 .NET 才能运行?托管与非托管是否归结为使用的编译器?

  • 如果运行编写和运行托管 Visual C++ 代码,有什么我可以在 VC++ 中做而我在 C# 中做不到的事情吗?

  • 除了为自己而学习(这很棒)之外,我是否会通过学习 VC++ 获得任何见解,如果是这样,我应该从哪里开始?

我知道这不是一个直接的编程问题,我已经准备好接受投票的冲击,但是,我对此感到非常好奇,并认为其他人也可能如此。

4

2 回答 2

1

我记得从 Stephan T. Lavavej 那里听到的一点见解是,MS 工具链中的几乎所有东西都通过某种方式依赖于 MSVC。这是极其重要的,尽管并不总是直接的。

它是否使用 C 和 C++,是否有不同的编译器?

它只支持 C++,但大多数 C 都可以使用 C++ 编译器进行编译。

有没有办法开发在 Visual C++ 中非托管运行的代码,或者在 Visual C++ 中开发的任何东西都需要 .NET 才能运行?托管与非托管是否归结为使用的编译器?

不,您不需要 .NET 或 C++/CLI。很多人没有。

如果运行编写和运行托管 Visual C++ 代码,有什么我可以在 VC++ 中做而我在 C# 中做不到的事情吗?

可能是低级的东西并使用 C 或 C++ 库。

除了为自己而学习(这很棒)之外,我是否会通过学习 VC++ 获得任何见解,如果是这样,我应该从哪里开始?

您将了解 C++ 提供的所有见解。您不需要 MSVC,只需任何编译器即可。

首先学习 C++。然后像 Dan-o 指出的那样阅读MSDN 文档。

于 2012-12-28T23:23:50.307 回答
1

它 [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++ 则完全不同。使用它的原因有很多:

  1. 模板:找出 C#“泛型”在模仿方面做得不好。
  2. 本机代码:有助于提高速度,消除对 .NET 的依赖。
  3. 一些(但不是全部)标准库的设计要好得多。
  4. 把最好的留到最后:RAII 管理各种资源,而 GC 只管理内存。

就个人而言,我认为您过于关注“一个编译器”与“两个编译器”——这几乎是毫无意义的区别。真正的问题不是涉及多少编译器,或者哪个编译器生成什么代码,而是如何完成你想要的——至少如果你在 VS 内部工作,它通常会整理出诸如哪个编译器之类的事情调用特定的源代码。

让这被视为一种推销(或类似的东西),我觉得有必要指出,与 C# 相比,C++ 并不全是奇迹和轻巧。举个例子,C++ 并不真正支持反射,这使得有些东西比 C# 更笨拙其他一些领域(例如,模板元编程)是可能的,但可能难以理解并且经常涉及真正可怕的语法。然后有一个简单的事实,即 C++ 的编译时间几乎总是比 C# 慢很多。

于 2012-12-29T02:02:59.750 回答