Aja*_*jay 5 foreach c++-cli visual-c++ auto
我在VC2010中编写了一个托管DLL(即/ VCR DLL项目启用了CLR).以下代码无法编译:
System::Collections::Generic::List<int>^ my_list;
for each(auto elem in my_list)
{
}
Run Code Online (Sandbox Code Playgroud)
它引发错误C3539:'auto':模板参数不能是包含'auto'的类型.
我不明白原因.我尝试在VS2012中编译相同的内容,它会引发相同的错误(这不是合适的错误).
为什么编译器无法推断出集合的类型?相同类型的代码可以在C#中使用var关键字.
首先,评论中最重要的一点:
所提供的代码确实可以在 VS2013 c++/cli dll .net 4.5 中编译(Zee,2014-05-03)
当您编译C++/CLI(C++ 的 .NET 绑定)时,您正在使用 Microsoft 编译器的不同功能集。是否有效
/clr生效与“正常”、本机 MSVC 编译器是否接受它无关。
至于“为什么”:看起来auto类型推导对于 VS2010 和 VS2012 中的托管句柄类型不起作用,但根据 Zee 的评论,类型推导已在 VS2013 中实现。(快速搜索引擎检查没有找到任何官方声明,所以我可能是错的。)