我正在家里做一个小小的C ++项目,我带到学校去展示我的老师。在家里我有Visual Studio 2012,而学校的计算机有Visual Studio 2010.在我的代码中,从家里,我有一个for循环,就像这样编译:
for(char c : myStr){...}
然而,当我在学校的计算机上试用它时,它没有编译,我最终不得不这样做:
for each(char c in myStr){...}
为什么会这样?
答案 0 :(得分:8)
for(char c : myStr){...}
语法是C++11
的新语法,因此使用旧版C++
的任何内容都无法使用该语法进行编译。
在C ++ 11之前,for_each
标题中定义了algorithm
。
答案 1 :(得分:4)
Visual Studio 2010中不支持C ++ 11基于范围的for循环。
第二种形式是从C ++ / CLI(一种完全不同的语言,以.NET运行时为目标)渗透到编译器中的语法。我一会儿填补了这个错误。如果使用/Za
开关进行编译,则会禁用此语言扩展名。您需要使用迭代器或std::for_each
来使用C ++ 03 for循环语法。
答案 2 :(得分:4)
“range for”是一个C ++ 11功能,added in Visual Studio 2012。要了解有关Visual Studio 2008(VC9)和Visual Studio 2010(VC10)中哪些C ++ 11功能的更多信息,请查看Visual C ++团队中的the blog entry。有类似的表格可以让您了解Visual Studio 2012以及Visual Studio 2013的几个不同版本。
结论:如果您使用的是Visual Studio 2012,那么您在家中执行的for
循环非常棒。如果不这样做,请使用常规for
或std::for_each
,而不是for each
你在那里使用。
答案 3 :(得分:3)
Foreach循环是在C ++ 11标准中引入的,您学校的编译器可能与新标准不一致。
答案 4 :(得分:3)
MS VC ++ 2010在采用C ++ 2011标准之前发布。所以它不支持基于范围的for语句。另一方面,MS VC ++ 2010具有MS-language-extension for-each-in,它是在托管C ++中引入的,用于支持C#的foreach语句。
答案 5 :(得分:2)
for(char c:myStr)语法是新的C ++ 11功能之一,Visual Studio中的VC ++不支持它。
有关VS2010和VS2012 C ++编译器实现的C ++功能列表,请参阅此页: http://blogs.msdn.com/b/vcblog/archive/2011/09/12/10209291.aspx