You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Visual C++中的非标准for each替换为标准C++语法?

替换Visual Studio非标准for each的标准C++方案

Visual Studio在C17及更早版本中支持一种C11之前的非标准for each语法,现在需要将如下非标准代码替换为标准C++写法:

#include <vector>

int main(int argc, char *argv[])
{
  std::vector<int> v{};
  for each(auto i in v){ }
  return 0;
}

可选替代方案分析

你提到的三种范围for循环写法都是标准C++的合法方案,具体选哪种取决于对容器元素的操作需求:

  • for (auto i : v):将容器元素拷贝到变量i中,行为和原非标准for each(auto i in v)完全一致。适合仅读取简单类型元素(比如示例中的int)的场景,但遍历大对象时会有拷贝性能开销。
  • for (auto& i : v):通过左值引用绑定容器元素,既能读取也能直接修改原容器中的元素。如果需要在循环内修改v的元素,就选这种写法。
  • for (const auto& i : v):通过常量左值引用绑定元素,仅能读取不能修改,同时避免了拷贝开销。是读取元素场景下的最优选择(无论元素类型),推荐作为默认读取遍历的写法。

对应原代码的最优替代

原代码仅遍历容器无修改操作,且元素为int这类简单类型:

  • 追求和原代码完全一致的行为,直接用for (auto i : v)替代即可;
  • 想养成高效遍历的习惯,优先选择for (const auto& i : v);
  • 只有需要修改容器元素时,才使用for (auto& i : v)。

内容的提问来源于stack exchange,提问作者user2023370

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 16:29:56