GoogleTestはここには含まれていません。C ++標準ライブラリの実装は例外をスローします。例外をどのように冗長にするかを決定するのは、C++標準ライブラリの実装次第です。
std::vector::at
例外が発生しているので、の代わりにを使用していると思いますstd::vector::operator[]
。より多くの情報を取得するために取ることができるいくつかの可能なアプローチがあります。
まず、への呼び出しをへの呼び出しに置き換えat
てoperator[]
(個人的には、at
の例外スロー範囲チェックが非常に役立つとは思わず、パフォーマンスのオーバーヘッドがあります)、C++標準ライブラリ実装のイテレータデバッグを使用できます。たとえば、g ++で、を使用operator[]
してコンパイルし-D_GLIBCXX_DEBUG
、の範囲チェックをオンにするoperator[]
と、次のようなエラーが発生します。
/usr/include/c++/4.3/debug/vector:237:error: attempt to subscript container
with out-of-bounds index 0, but container only holds 0 elements.
at
次に、への呼び出しをへの呼び出しまたは同様のものに置き換えることができますtest_at
:(未テスト)
template <typename T>
T& test_at(std::vector<T>& v, size_t n) {
// Use Google Test to display details on out of bounds.
// We can stream additional information here if we like.
EXPECT_LT(n, v.size()) << "for vector at address " << &v;
// Fall back to at, and let it throw its exception, so that our
// test will terminate as expected.
return v.at(n);
}