3-7-18 测试string中at和[]抛出异常机制

3.7-18 测试string中at和[]抛出异常机制

经测试:

  • at函数对超出size的参数,会抛出out_of_range异常。

  • []重载运算符对超出size但不超出capability的参数,会返回未知字符,对于超出capability的参数,会崩溃。

下面程序中,如果将2000改成100,就会正常退出,但是会输出一个未知字符。

#include <exception>
#include <iostream>
#include <string>
using namespace std;

int main(int argc, char const *argv[])
{
string s1 = "This is a string in 123456.";

try
{
cout << s1.at(2000);
}
catch (const std::exception &e)
{
std::cerr << e.what() << '\n';
}
try
{
cout << s1[2001];
}
catch (const std::exception &e)
{
std::cerr << e.what() << '\n';
}
return 0;
}