Visual C++ 2005 中的新关键字和新指针类型。啥是托管 C++?

Posted

技术标签:

【中文标题】Visual C++ 2005 中的新关键字和新指针类型。啥是托管 C++?【英文标题】:New keywords and new type of pointers in Visual C++ 2005. What is managed C++?Visual C++ 2005 中的新关键字和新指针类型。什么是托管 C++? 【发布时间】:2009-10-12 10:56:09 【问题描述】:

可能重复What is gcnew?What does the caret mean in C++/CLI?Difference between managed c++ and c++

我是一名使用 g++ 的高级 C++ 程序员。但目前我正在使用 Visual C++ 2005 进行 Windows 窗体应用程序编程。但我发现它的新术语很难。例如而不是 new 它有 gcnew

String ^ 之类的。有人能解释一下^是什么,类似于指针吗?

我能否使 Visual C++ 像 g++ 编译器一样以与普通 C++ 相同的方式工作?我还听说过一些有关托管 C++ 的信息。那是什么?

【问题讨论】:

为了完整起见,如果我没记错的话,托管 C++(或者更确切地说是“C++ 托管扩展”)在 2005 年被废弃,而 2005 年及以后启用 CLR 的 C++ 版本称为 C++/CLI . 【参考方案1】:

gcnew 和 ^ 值是托管的 C++,它是与 c++ 不同的语言。通过不使用新项目窗口的 CLR 部分中的项目类型,您可以将 VS2005 用作普通的 C++ 编译器。

【讨论】:

我能用它进行相同的 Windows 窗体应用程序 (GUI) 编程吗?因为 Windows 窗体应用程序出现在 CLR 下。 您可以在托管项目中使用非托管代码,但您需要在 winforms 中使用特殊语法。如果您不想使用这种特殊语法,您应该从新建项目向导的 MFC 部分创建一个 MFC 项目。 根据定义,Windows 窗体在没有 CLR 的情况下不可用,因为它是标准的 CLR GUI 系统。 如果您使用 MFC 及其对应的“常规”C++,您可以通过“常规”C++ 使用 Windows 窗体应用程序代码(即 .NET 代码,可以是 C#、Visual Basic .NET 或上述 C++/CLI) .NET 接口类。阅读更多:msdn.microsoft.com/en-us/library/ahdd1h97%28VS.80%29.aspx ... 然而,使用 Windows 窗体框架在 Windows 和 C++ 中编写 GUI 不是必需的。如上所述,这仅由 .NET 应用程序使用。 Visual Studio 和 MFC 中的典型 C++ 应用程序的 GUI 只需由 C++ 表单设计器构建。【参考方案2】:

gcnew^ 来自新的 Visual C++ 语法。新语法不是 ISO/ANSI C++ 标准的一部分,而是一组在 Ecma C++/CLI 标准下标准化的 C++ 扩展。如果你不想,你可以不使用它们。 Here 你可以阅读更多关于 Visual C++ 扩展的信息。

【讨论】:

【参考方案3】:

Windows 窗体是特定于 .Net 的,因此如果您想这样做,则需要使用 C++/CLI(即“托管 C++”)。

但是,我不确定您是否真的想要 Windows 窗体?您只想要某种窗口式 GUI,对吗?如果是这种情况,您可以使用 MFC 之类的东西或仅使用本机 O/S 调用来创建您的 GUI,或者您可以使用像 Qt 这样的包装 API

[编辑] 只是为了澄清一点:)

我还听说过一些有关托管 C++ 的信息。那是什么?

C++/CLI 是 C++ 的 .Net 实现。在这里,您可以使用常规 C++ 和托管代码。 C++/CLI 是微软试图简化 C++ 开发人员进入托管框架的学习曲线的尝试,但是,现在它并没有被大量使用,你可能很难找到(m)任何好的教程。 Visual C++ 只是 IDE 的名称,它与您使用哪种 C++ 无关。您可以像使用 g++ 一样使用 Visual C++,但是如果您不想通过控制台应用程序进行任何操作,则需要将一些 GUI 逻辑连接到您的应用程序中。正如我在原始答案中所说,这可以通过多种方式完成。

如果您确定要使用 .Net,我建议您花一天时间使用 C#,因为如果您有 C++ 经验,学习起来真的很容易,但从您的问题来看,我认为这不是您想要的: )

【讨论】:

【参考方案4】:

托管 C++ 用于 Microsoft 公共语言运行时 (CLR) 中的 .Net 开发。创建这种特殊的 C++ 语法是为了让 C++ 开发人员无需学习 C# 等新语言即可进入 .Net 社区。​​p>

通过创建非 CLR 项目,您可以像使用 g++ 一样使用 Visual C++。

【讨论】:

但是我想做 Windows 窗体应用程序编程(在 CLR 下)。该怎么做? Winforms 是托管的,因此您必须使用托管 c++ 来使用它们(如果您的应用程序的非 GUI 部分可以使用非托管 c++)。它不打算使用托管 c++ 创建新项目。它的第一个用途是将 c++ 程序“翻译”为 .Net 程序。 不,WinForms 可以在任何 CLR 语言中使用,而不仅仅是 C++/CLI。【参考方案5】:

请注意,Windows 窗体并不是在 Windows 下制作 GUI 的唯一方法。如果你想要纯 C(如果你愿意,你可以用 C++ 包装),你可以使用常规的 Win32 API。

如果您确实选择了 Windows 窗体,那么您可以选择使用 C#、VB.NET 或 C++/CLI(托管 C++)。您不需要使用 C++/CLI,这似乎是您的假设。

【讨论】:

以上是关于Visual C++ 2005 中的新关键字和新指针类型。啥是托管 C++?的主要内容,如果未能解决你的问题,请参考以下文章

C++ 项目依赖问题 Visual Studio 2005

Visual Studio 中的vc++ 2005创建一个C++的项目,求有多线程的例子!!!

在 Visual C++ 2005 中开发的 Visual C++ 项目 - 在 Visual C++ 2010 中,打开菜单时调试断言失败,但发布模式有效,如何解决?

在安装时安装 Visual C++ Redistributables 2005

在 Visual Studio 2005 C++ 中设置文件版本号

Visual Studio 2005 C++ 编译器比 Visual Studio 6 编译器慢?