からリカバリすると、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);
を試してみてください。
operator []は範囲チェックを実行できますが、必須ではありません。 at()は範囲チェックを必要とします。 – Sjoerd
Ok、C++では 'operator []'の範囲チェックが*たいていは*ありません。 :-) –
std::vector::at()
メンバー関数を使用してください。 out_of_range
例外がスローされます。
フロー制御の例外を使用することは悪い考えです。 'if(i> = 0 && i