C++/CLI中是否有与C#中的"var"关键字相当的东西?

30

在C#中,我喜欢像这样使用var关键字的情况:

var myList = new List<MyType>();

在C++/CLI中是否有等效的方法,或者我必须像这样每次都重复类型名称:

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

到目前为止,我在文档或谷歌上都没有找到明确的说法。我正在使用Visual Studio 2008。

2022年补充说明:正如被接受的答案正确地指出,现在有auto关键字。我们现在已经使用它多年了,它能够无缝地处理托管和非托管类型。


23
顺便说一句,我从没意识到 List<MyType ^>^ 看起来像一个非常开心的表情符号。 - John Feminella
4个回答

37

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


这不是C++0x中的一个特性吗? - John Dibling
3
是的,这是 C++0x 的一个特性。 - DaMacc
我不是100%确定,但我似乎记得C++0x特性目前不会被移植到C++/CLI。他们目前没有足够的资源。从长远来看,它肯定会被添加到C++/CLI中,但我不认为它会在VS2010中出现。虽然我可能错了,但这只是我在VCTeam博客上读到的内容。 - jalf
3
不是这样的,因为C++0x听起来更好,并且有一个优点,就是每个人都习惯了这个名字,并知道它指的是什么。 - jalf
1
@Yacoder:除了jalf说的之外,如果它在今年获得批准,我们也可以转移到十六进制并称其为C++0A。 - sbk
@jalf:0x vs 1x...现在委员会将讨论该问题约一到两年时间 =) - Massimiliano

13

我知道类型推断在C++1x标准中是有预期的:

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

目前,据我所知,没有相当的东西。


下一个标准的“代号”仍然是C++0x,即使我们已经进入了2010年。 - sellibitze

4

C++有typedef。只需使用typedef为那些复杂的类型创建别名,然后使用友好名称。

不,C++没有"var"关键字。模糊地记得boost库中有类似的东西。


好的,typedef有时可能会有帮助,但是例如“typedef List<MyType^> ^ListMyType”并没有太多的收益。 - Doc Brown
你可以将其typedef为更短的名称,比如list。它不必是全局唯一的名称,只需要在使用它的上下文中是唯一的即可。 - jalf

3

3
自动(auto)已经是一个关键字,他们只是重新使用了它。 - sellibitze
@Simon_Weaver 曾经将变量的作用域定义为当前块的结尾。 - ThunderGr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接