【问题标题】:Multiple variable declare and initialization inside for-scope [duplicate]for-范围内的多个变量声明和初始化[重复]
【发布时间】:2013-08-05 14:09:38
【问题描述】:

我正在尝试在 for 范围内声明和初始化不同类型的变量。 比如:

for (int i = 0, double u = 1; i < 10; ++i)
{...}

但编译器 (gcc) 会返回错误。

我知道可以使用相同类型的变量 (example) 执行初始化,但我不知道如何使用不同的变量执行初始化。

当然我可以在循环外声明变量:

double u = 1;
for (int i = 0; i < 10; ++i)
{...}

但我正在寻找一些干净的东西,因为变量 u 仅在 for 范围内使用。 所以,

  • 可以吗?
  • 如果可以,我该怎么做?

【问题讨论】:

  • 最干净的方法可能是使其成为一个新范围并将u 放在循环之外。
  • 知道了,唯一(丑陋的)方法是使用结构。在这种情况下,我唯一能做的就是在 for-scope 之外声明 u 变量。

标签: c++ for-loop scope


【解决方案1】:

不允许在声明语句中声明一种以上的类型。将 u 包含在远程接近 for 循环的范围内的唯一方法是:

{
    double u = 1;
    for (int i = 0; i < 10; ++i)
    {
        //some code
    }
}// u's scope will end here

【讨论】:

    【解决方案2】:

    当然可以创建一个新的作用域,但是写一个函数是更常见的方式。

    void foo()
    {
        // So this function deals with loop and does something with 'u'.
        double u = 1;
        for (int i = 0; i < 10; ++i)
        { ... }
    }
    

    很难说你是否真的需要一个函数,但我相信这是一种非常干净和自然的方式。

    【讨论】:

      【解决方案3】:

      您必须像在代码的另一部分中声明这些变量一样思考。 如果它们共享类型,则始终可以在同一行中声明任意数量的变量。 您可以声明: 诠释a=3,b=3; 但是';'指向此类型声明的结尾。如果您尝试这样做: int a=3,双 b=3.4; 如您所愿,编译器将其翻译为 b 变量的“双重”声明。首先编译器将其识别为 int,但随后您指定了另一种类型。这就是为什么你不能这样做。如果您尝试按照编译器的意愿执行此操作(type variable=value; another_type another_variable = another_value;),您将破坏 for 结构。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-18
        • 1970-01-01
        • 2012-10-22
        相关资源
        最近更新 更多