c++ - 有没有办法在 for 循环初始值设定项中定义两种不同类型的变量?

标签 c++ for-loop scope initializer variable-declaration

你可以在 for 循环中定义 2 个相同类型的变量:

int main() {
  for (int i = 0, j = 0; i < 10; i += 1, j = 2*i) {
    cout << j << endl;
  }
}

但是定义不同类型的变量是非法的:

int main() {
  for (int i = 0, float j = 0.0; i < 10; i += 1, j = 2*i) {
    cout << j << endl;
  }
}

有没有办法做到这一点? (我不需要在循环中使用 i,只需使用 j。)

如果您有完全破解和晦涩的解决方案,那对我来说没问题。

在这个人为设计的示例中,我知道您可以对两个变量都使用 double。我正在寻找一般性答案。

请不要建议将任何变量移到 for 主体之外,这可能对我来说不可用,因为其中一个是迭代器,必须在循环之后立即消失,并且 for 语句将包含在我的 foreach 中宏:

#define foreach(var, iter, instr) {                  \
    typeof(iter) var##IT = iter;                     \
    typeof(iter)::Element var = *var##IT;            \
    for (; var##_iterIT.is_still_ok(); ++var##IT, var = *var#IT) {  \
      instr;                                         \
    }                                                \
  }

可以这样使用:

foreach(ii, collection, {
  cout << ii;
}). 

但我需要这样的东西:

foreach(ii, collection)
  cout << ii;

请不要引入任何运行时开销(但编译速度可能会很慢)。

最佳答案

Please do not suggest to move any of the variables outside of for body, probably not usable for me as the iterator has to disappear just after the loop.

你可以这样做:

#include <iostream>

int main( int, char *[] ) {
    {
        float j = 0.0;

        for ( int i = 0; i < 10; i += 1, j = 2*i ) {
            std::cout << j << std::endl;
        }
    }

    float j = 2.0; // works

    std::cout << j << std::endl;

    return 0;
}

关于c++ - 有没有办法在 for 循环初始值设定项中定义两种不同类型的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/866012/

相关文章:

c++ - 查找未执行的 C++ 代码行

python - 比较和打印嵌套循环中的元素

powershell - 使用参数 ("By Reference"参数从 PowerShell 返回对象)?

javascript - 在 JavaScript 原型(prototype)函数中保留对 "this"的引用

python - python线程可以访问命名空间中的变量吗?

c++ - 数组中相隔 8 个或更多位置的两个元素的最大乘积

c++ - 如何制作一些简单的GUI控件?

c++ - 如何在编译时判断一个类型是否派生自模板类?

c - (双)for 循环与 C 中的变量索引

java - 使用 for 循环将数组复制到另一个数组