【问题标题】:Is there an equivalent to the C# "var" keyword in C++/CLI?在 C++/CLI 中是否有等效于 C#“var”关键字?
【发布时间】:2011-01-01 18:04:45
【问题描述】:

在 C# 中,我喜欢 var 关键字用于以下情况:

var myList = new List<MyType>();

在 C++/CLI 中是否有任何等价物,还是我每次都必须像这样重复类型名称:

List<MyType ^>^ myList = gcnew List<MyType ^>();

目前无法在文档中或 Google 中找到明确的声明。我正在使用 Visual Studio 2008。

【问题讨论】:

  • 在一个无关的笔记上,我从来没有意识到List&lt;MyType ^&gt;^ 似乎包含了一个非常快乐的表情符号。

标签: c# .net c++-cli type-inference


【解决方案1】:

在 Visual Studio 2008 中没有这样的等价物。但是,在 Visual Studio 2010 中,您可以使用 auto 关键字来实现 var 类似 C++ 中的语义。我知道这适用于非托管 C++,而且我相当肯定它也适用于 C++/CLI。

【讨论】:

  • 这是 C++0x 中的一个特性,不是吗?
  • 是的,这是C++0x的一个特性。
  • 我不是 100% 确定,但我似乎记得 C++0x 的功能此时不会被移植到 C++/CLI。他们只是没有资源atm。从长远来看,它肯定会被添加到 C++/CLI 中,但我认为它不会出现在 VS2010 中。不过我可能是错的,这正是我记得在 VCTeam 博客上读到的内容。
  • 不,不是,因为C++0x更好听,而且好处是大家都习惯了这个名字,知道它指的是什么。
  • @Yacoder:除了jalf说的,如果今年能通过的话,我们也可以转成hex,叫C++0A
【解决方案2】:

我知道C++1x standard 中设想了类型推断:

auto someStrangeCallableType = boost::bind(&SomeFunction, _2, _1, someObject);
auto otherVariable = 5;

目前,AFAIK,没有等效的。

【讨论】:

  • 下一个标准的 code name 仍然是 c++0x,即使我们已经有了 2010。
【解决方案3】:

C++ 有 typedef。只需使用 typedef 为那些毛茸茸的类型起别名,并使用友好的名称。

不,没有“var”关键字。隐约记得在 boost 中有一些类似的效果。

【讨论】:

  • 好吧,typedef 有时可能会有所帮助,但是,例如,“typedef List^ ListMyType”并没有太大的帮助。
  • 您可以将其键入更短的内容,例如 list。它不必是全局唯一的名称,只要在使用它的上下文中是唯一的即可。
【解决方案4】:

【讨论】:

  • auto 已经是一个关键字。他们只是回收了它。
  • @Simon_Weaver 用于将变量的范围定义为当前块的末尾。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-29
  • 2019-11-09
  • 1970-01-01
  • 2010-12-29
  • 2021-08-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多