Visual C ++的作用是什么?

时间:2012-12-28 23:14:47

标签: .net visual-studio visual-c++

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

我有以下问题:

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

  • 如果正在运行编写和运行托管的Visual C ++代码,我在VC ++中可以做些什么我不能用C#做什么?

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

我知道这不是一个直接的编程问题,而且我已经准备好迎接这些问题,但是,我对这一点非常好奇,并认为其他人可能也是如此。

2 个答案:

答案 0 :(得分: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,只需要任何编译器。

Learn C++ first.然后阅读Dan-o指出的MSDN documentation

答案 1 :(得分: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既不是鱼也不是鸡,我通常会避免使用它。

Real C ++是一个不同的故事。使用它的原因有很多:

  1. 模板:找出C#“仿制药”在模仿方面做得不好。
  2. 本机代码:可以帮助提高速度,消除对.NET的依赖。
  3. 标准库的某些(但不是全部)设计得更好。
  4. 保留最佳效果:RAII管理各种资源,GC只管理内存。
  5. 就我个人而言,我认为你过于专注于“一个编译器”而不是“两个编译器” - 这是一个几乎没有意义的区别。真正的问题不是涉及多少编译器,或者哪个编译器产生了什么代码,而是如何实现你想要的 - 至少如果你在VS内部工作,它通常会解决类似编译器的问题。调用特定的源代码。

    让我们将其视为销售宣传(或类似的东西)我觉得有必要指出,与C#相比,C ++并非所有奇迹和光明。例如,C ++并不真正支持反射,这使得某些事情很多比C#更笨拙。一些其他领域(例如,模板元编程)是可能的,但是可能难以理解并且通常涉及真正可怕的语法。然后有一个简单的事实,C ++的编译时间几乎总是比C#慢一点。