如何在C++的另一个范围内使用局部变量
How can I use local variable in another scope in C++?
我想在另一个作用域中访问main函数的局部变量。
我的目标是打印 20 英寸 cout
.
我该怎么做?
怎么可能C++?
int var = 10;
int main(int argc, char *argv[])
{
int var = 20; // this var
{
int var = 40;
cout << ::var; // I want to print `var` variable in main scope.
// But this command print global variable.
}
return 0;
}
没有办法做到这一点。该语言不提供区分main
中的第一个var
和第二个var
的方法。
如果您曾经编写过生产代码,请不要使用此类变量。这将导致错误代码。您将对给定代码行中的哪个变量在范围内感到困惑。
您不能访问其范围之外的变量(在某些情况下extern
可以使用但不能在您的代码中使用)。因此,您不能在其范围之外使用变量var
(在最里面的块内声明)。例如
int var = 10;
int main(int argc, char *argv[])
{
int var = 20; // this var
{
int var = 40;
}
cout << var; // this will access var declared first and prints 20
return 0;
}
相信我,没有必要以这种方式声明和使用变量。这将导致错误代码。请记住,如果您使用 GCC 或 clang,请在编译时始终使用编译器标志-Wshadow
因为如果在代码中的任何位置执行类似操作,它会显示警告。如果不从终端编译代码,请尝试将其包含在 IDE 或生成文件中。
案例 A
int var = 10;
int main(int argc, char *argv[])
{
int var = 20; // this var
{
int var = 40;
cout << ::var; // This will output 10 because you have used scope of operator that'll point to global variable in C++.
}
return 0;
}
案例B
int var = 10;
int main(int argc, char *argv[])
{
int var = 20; // this var
{
int var = 40;
cout <<var; // This will output 40 because you are using local variable.
}
return 0;
}
案例 C
int var = 10;
int main(int argc, char *argv[])
{
int var = 20; // this var
{
int var = 40;
}
cout << var; // this will output 20 because using var that is declared in main() function.
return 0;
}
关于您的示例代码
int var = 10;
int main(int argc, char *argv[])
{
int var = 20; // this var
{
int var = 40;
cout << ::var; // I want to print `var` variable in main scope.
// But this command print global variable.
}
return 0;
}
以及评论中的既定目标,
" 我想在主范围内打印
var
变量
...您可以按如下方式执行此操作,只需为其添加别名:
int var = 10;
int main()
{
int var = 20; // this var
{
auto& outer_var = var;
int var = 40;
cout << outer_var;
}
}
C++不提供可以为您执行此操作的范围解析机制。如果有这样的机制,例如相对作用域解析或函数名称作为伪命名空间名称,它可能会被使用,然后人们会看到至少一些难以理解的代码,因为在一小段代码中对不同的东西使用相同的名称。另一种语言设计类似于C#,其中阴影(如内部var
阴影外部var
)是完全禁止的。
同样,C++不提供任何为全局命名空间提供其他名称的方法。其他命名空间可以别名,但不能使用全局命名空间,因此可以非常确定全局命名空间不是通过看起来像companyname::counter
的东西引用的,比如说。
C++还有一个限制,即命名空间作用域函数可以重载哪些运算符,再次提供一种理智的度量,这是人们绝对可以依赖的。关于最后一个理由,我从Bjarne Stroustrup(语言创造者)那里知道这一点。关于缺乏相对范围解析和缺乏全局命名空间别名的基本原理,这只是一个有条件的猜测,它是相同的,但它是有道理的。:)
- 将引用分配给局部变量,如果局部变量超出范围,它会超出范围吗?
- 在C++中使用变量而不是"#define"来指定数组大小是不是一种糟糕的做法?(C错误:在文件范围内
- 如何改进一堆在已知值范围内评估变量的 else-if 条件?
- c++ 变量在宏的扩展中没有在这个范围内声明
- C++中静态方法的局部变量范围
- 变量不在 lambda 的范围内
- 离开范围后如何保护局部变量的值?
- 检查私有成员变量是否在一定范围内,如果没有调整
- 无法在命名空间范围内分配变量
- 从 Outsie it 范围 C++ 访问局部变量
- 为什么变量在局部范围内声明,并放入范围外可见的向量中
- 未在此范围内声明变量gcc错误
- 在 cpp 文件中命名空间范围内"Private"变量
- 错误:未在此范围内声明变量!?C++
- 在Eclipse IDE C++上,未在此范围内声明变量
- 为什么在未命名的命名空间中声明变量后无法在全局范围内定义变量?
- 在最近的封闭范围内使用using指令声明局部外部变量
- 在 c++ 中存储块内局部变量的分配
- 如何在C++的另一个范围内使用局部变量
- 在类范围内声明与类属性同名的局部变量