C++ ときどき ごはん、わりとてぃーぶれいく☆

USAGI.NETWORKのなかのひとのブログ。主にC++。

std::array::empty()

必要なシーンに今まで遭遇していなかった事もあり、std::array::empty()の存在と動作なんて考えた事も無かった。実際問題としてstd::array::empty()が存在し使えるのかは規格書開くより実装確認した方が早いのでとりあえずideoneに入れてみた。

http://ideone.com/qbtEsQ

source

#include <array>
#include <iostream>

int main(){
  std::array<int,0> a;
  std::cout << std::boolalpha << a.empty();
}

result

true

コンパイルエラーも出ず(つまり少なくともgcc-4.5.1ではstd::array::empty()は定義されている)、サイズ0で作成したstd::arrayのemptyはtrueを得られた。N3337§23.3.2.1 を読むと、std::arrayにもempty()メンバー関数は仕様に含まれていた。

ちなみにstd::arrayのempty()は常にfalseを返す。理論的にはstd::arrayというオブジェクトに置けるempty()とは…と考え始めるとそれはtrueで正解なのか考え込んでしまいそうだけど、C++のコンテナーとアルゴリズムという視点で見ればstd::arrayのempty()がtrueを返す事は当然であり何ら問題無い。

…実用コード上でstd::arrayのemptyを使う機会は机上の空論であれ事実上無いと言えそうな気はするけれど。まあ、考えなくていいやそれは・x・;