异常 C++,我只是不明白为什么输出是这样的
exceptions C++ , I just don't understand why the output is what it is
#include <iostream>
using namespace std;
class Array
{
private:
int* a;
int n;
public:
Array(int n) : n(n) {a = new int[n];};
~Array(){delete a;};
int& operator[](int i)
{
try
{
if ( i < 0 || i >= n) throw 1;
return a[i];
}
catch(int i)
{
cout << "Exception Array" << endl;
return a[0];
}
};
};
int main()
{
Array a(2);
try
{
a[0] = 1;
cout << "a[0]=" << a[0] << endl;
a[1] = 1;
cout << "a[1]=" << a[1] << endl;
a[2] = 2;
cout << "a[2]=" << a[2] << endl;
}
catch(int i)
{
cout << "Exception main " << endl;
}
cout << "End. " << endl;
}
好的,所以输出是这样的:
a[0]=1
a[1]=1
异常数组
异常数组
a[2]=2
结束。
让我困惑的是程序返回的原因
a[2] 作为值 2?有人可以一步一步地详细说明这是如何实现的。我想我不太了解 C++ 中的异常。
这个代码
a[2] = 2;
cout << "a[2]=" << a[2] << endl;
尝试访问 a[2]
两次,一次在赋值中,一次在输出语句中。它们都超出范围,所以有两个例外。
a[2] = 2;
这里你用一个越界值调用你的operator[]
;它打印 Exception Array
和 returns 对 a.a[0]
的引用。因此(忽略日志消息),此赋值等同于 a[0] = 2;
- a.a[0]
的值现在为 2.
cout << "a[2]=" << a[2] << endl;
在这里您再次调用具有相同参数的operator[]
;它再次输出异常消息和 returns 对 a.a[0]
的引用,其值仍为 2,如前一条语句中所分配的那样。
#include <iostream>
using namespace std;
class Array
{
private:
int* a;
int n;
public:
Array(int n) : n(n) {a = new int[n];};
~Array(){delete a;};
int& operator[](int i)
{
try
{
if ( i < 0 || i >= n) throw 1;
return a[i];
}
catch(int i)
{
cout << "Exception Array" << endl;
return a[0];
}
};
};
int main()
{
Array a(2);
try
{
a[0] = 1;
cout << "a[0]=" << a[0] << endl;
a[1] = 1;
cout << "a[1]=" << a[1] << endl;
a[2] = 2;
cout << "a[2]=" << a[2] << endl;
}
catch(int i)
{
cout << "Exception main " << endl;
}
cout << "End. " << endl;
}
好的,所以输出是这样的:
a[0]=1
a[1]=1
异常数组
异常数组
a[2]=2
结束。
让我困惑的是程序返回的原因 a[2] 作为值 2?有人可以一步一步地详细说明这是如何实现的。我想我不太了解 C++ 中的异常。
这个代码
a[2] = 2;
cout << "a[2]=" << a[2] << endl;
尝试访问 a[2]
两次,一次在赋值中,一次在输出语句中。它们都超出范围,所以有两个例外。
a[2] = 2;
这里你用一个越界值调用你的operator[]
;它打印 Exception Array
和 returns 对 a.a[0]
的引用。因此(忽略日志消息),此赋值等同于 a[0] = 2;
- a.a[0]
的值现在为 2.
cout << "a[2]=" << a[2] << endl;
在这里您再次调用具有相同参数的operator[]
;它再次输出异常消息和 returns 对 a.a[0]
的引用,其值仍为 2,如前一条语句中所分配的那样。