有没有办法在for循环之外访问for循环中声明的变量?

问题描述 投票:0回答:6

例如,在 for 循环中定义了一个名为“character”的

char
。我可以在 for 循环之外使用
char
吗?

代码:

#include <iostream>

int main()
{
    for(int i = 0; i < 5; i++)
    {
        char character = 'a'; // Char defined in for loop
    }

    std::cout<<character; // Can this be made valid?
    return 0;
}
c++ for-loop variables
6个回答
0
投票

是的,您可以在 C++11 及更高版本中使用 lambda 间接执行此操作:

#include <iostream>
#include <functional>

int main()
{
  std::function<char()> fun;

  for(int i = 0; i < 5; i++)
  {
    char character = 'a'; // Char defined in for loop
    fun = [=](){ return character; };
  }

  std::cout << fun() << std::endl;
  return 0;
}

外部作用域无法访问

character
,但是可以调用在该作用域中捕获的 lambda,并且该 lambda 的主体在作用域中具有
character
,并且可以为我们返回它。

在具有真正 lambda 的语言中,lambda 将访问实际的

character
变量;在该范围内创建的原始版本。在 C++ 中,
=
中的
[=]
告诉 lambda 通过复制它们来捕获它正在引用的局部变量。因此
return character
实际上并不是访问原始的
character
(由于块终止,它不再存在),而是 lambda 对象携带的副本。


0
投票

不。在循环或函数内部定义的变量的范围就在该循环或函数内。

如果您想要一个变量,您可以在循环中设置一个值,但也可以访问循环外部,您可以创建一个全局变量(或只是一个具有更广泛范围的变量)。只需在作用域循环之外定义变量并将其设置为循环中所需的值即可。


0
投票

不。因为循环内声明的变量具有局部作用域,即只能在循环内访问它


0
投票

不,如果变量的定义在循环内部,则不能在循环外部使用它


0
投票

NO 为“在某个范围内声明的变量永远不能在该范围之外使用”。永远记住这一点!


0
投票

如果使用 Microsoft Visual C++ 编译它,则可以添加选项 /Zc:forScope- 以禁用 for 循环范围的一致性。

此示例代码是从 MSDN 链接复制的。

// zc_forScope.cpp
// compile by using: cl /Zc:forScope- /Za zc_forScope.cpp
// C2065, D9035 expected
int main() {
    // Compile by using cl /Zc:forScope- zc_forScope.cpp
    // to compile this non-standard code as-is.
    // Uncomment the following line to resolve C2065 for /Za.
    // int i;
    for (int i = 0; i < 1; i++)
        ;
    i = 20;   // i has already gone out of scope under /Za
}
© www.soinside.com 2019 - 2024. All rights reserved.