myoukakuのブログ

C++でゲームエンジンを作っていきます。

空のstd::vectorのdataの値

空のstd::vectorに対してdata()を呼び出した時、任意の値を返しても良いことになっている。

つまり

  • nullptr かもしれない
  • 有効なアドレスを指したポインタかもしれない

なぜかというと [data(),data() + size()) が有効な範囲を表すと定義されており、size()が0の場合はdata()の値が何であれこれを満たすから。

参考: c++ - What should std::vector::data() return if the vector is empty? - Stack Overflow

data()を使うときは、その前にempty()かどうかチェックしたほうがいい場合が多いだろう。

if (!v.empty())
    do_something(v.data());