在C ++中模拟严格/不可中断的for循环

时间:2018-03-17 20:15:19

标签: c++

我正在编写一种编译为C ++的玩具语言作为练习。我正在尝试添加一个带有索引变量,下限和上限的OCaml / Pascal / Fortran样式for循环。

然而,C风格的for循环比这更通用。它允许修改循环变量,并且需要按顺序依次执行for循环体,因为您可能breakreturn抛出异常,调用goto& c ,更不用说副作用了。

我的理解是,C ++编译器擅长优化使用C风格for循环的情况,但恰好不会break或修改循环变量& c。我正在尝试找到一种方法来编写我想要的严格for循环到C ++中,这样做根据C ++标准执行这些操作实际上是未定义的行为,并且理想情况下,以现有的实现方式C ++可以利用。

我能提出的最接近的例子是*:

for (int i = 0; i < 400; ++i) {
  [](const int i) noexcept {
    printf("%d\n", i);
  }(i);
}

noexcept不够严格。如果抛出异常,则调用std::terminate ...这意味着重新排序正文的执行不是合法的优化。

*此处const在技术上是不必要的。只是在那里修改“假”循环变量是编译时错误。

0 个答案:

没有答案