use*_*485 0 c++ debugging error-handling scope
在c ++中,main中声明的所有变量都可以在主权中使用?我的意思是如果变量是在try循环中声明的,那么它们仍然可以在整个main中访问吗?因为我在main中的try循环中声明了几个变量,但是如果我在try循环之外的main的任何其他部分中使用它们,我会得到"未在此范围中声明"错误
遗憾的是我无法发布我的实际代码,但这基本上就是我在做的事情
int main()
{
try
{
int number = 0;
}
catch (...)
{
cout <<"Error";
}
number ++;
cout <<number;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我基本上会在第13行和第14行得到一个错误,说这个范围没有声明数字.
范围number仅限于try块.将此声明拉出到main范围以在try块之后访问变量:
int main()
{
int number = 0;
try
{
// do something...
}
catch (...)
{
cout <<"Error";
}
number ++;
cout <<number;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
C++中的局部变量具有块范围,而不是函数范围.变量number仅在try块内的范围内.
为了使这项工作,你有(至少)两个选择:
使函数在函数范围内可访问(不太好):
int main() {
int number;
try {
number = <some possibly-exception-throwing call>;
} catch (...) {
cout << "Error\n";
return 0;
}
++number;
cout << number;
}
Run Code Online (Sandbox Code Playgroud)将所有变量放在try范围内(更好):
int main() {
try {
int number = <some possibly-exception-throwing call>;
++number;
cout << number;
} catch (...) {
cout << "Error\n";
}
}
Run Code Online (Sandbox Code Playgroud)我强烈赞成第二种选择,原因如下:
number使用比常量更有趣的东西初始化),那么你的代码就会精确地展示这个bug .附录:main()特别是,有第三种选择:
int main() try {
...
} catch {
cout << "Error\n";
}
Run Code Online (Sandbox Code Playgroud)
这包括整个程序,包括静态初始化程序main(),在try ... catch中.
| 归档时间: |
|
| 查看次数: |
2118 次 |
| 最近记录: |