是否有可能从C++中的向量“超出范围”错误中恢复?从向量中恢复无法到达的错误
像这样的功能:
vector<int> numbers;
bool isAccessable(int i)
{
try
{
numbers[i];
catch (...)
{
return false;
}
return true;
}
有可能在C#中,但C++?
是否有可能从C++中的向量“超出范围”错误中恢复?从向量中恢复无法到达的错误
像这样的功能:
vector<int> numbers;
bool isAccessable(int i)
{
try
{
numbers[i];
catch (...)
{
return false;
}
return true;
}
有可能在C#中,但C++?
如果你只是要检查索引是否在范围内,后来干脆:
return i < numbers.size();
(你也应接受零比较或索引更改为无符号类型; size_t
通常类型用于数组索引)
如果你想尝试访问的价值,并抛出一个异常,如果该指数超出范围,则使用at
而非[]
:
try {
do_something_with(numbers.at(i));
return true;
} catch (std::out_of_range const &) {
return false;
}
在C++中没有运算符[]的范围检查,但存在vector :: at()。
尝试
numbers.at(i);
代替。
运算符[]可以执行范围检查,但不是必需的。 at()需要范围检查。 – Sjoerd 2011-12-30 12:38:16
好的,在C++中最常见的是*没有范围检查'operator []'。 :-) – 2011-12-30 12:47:21
使用std::vector::at()
成员函数。它抛出了一个out_of_range
异常。
用于流量控制的例外情况是一个坏主意。为什么不在访问元素之前检查范围:'if(i> = 0 && i
2011-12-30 12:39:49