すべての配列はアグリゲートである。ところが、今執筆しているC++本で、ふと気がついたら、何を間違えたか、
アグリゲート(aggregate)とは、配列かクラスでユーザー定義のコンストラクター、非staticデータメンバーの初期化子、privateおよびprotectedな非staticデータメンバー、基本クラス、virtual関数が存在しないものをいう。
などと書いていた。これでは、配列にも、ユーザー定義のコンストラクター云々といった条件が課されるように読めてしまう。危ないところだった。このままでは、日本トンデモ本大賞を受賞してしまう。配列は、たとえアグリゲートではないクラスの配列型であったとしても、アグリゲートである。
しかし、一般に、あまりアグリゲートではないクラスの配列をリスト初期化した覚えはない。例えば、以下のようには書かない。
std::string a[] = { "hello", "fake silly C++", "world" } ;
そもそも考えて見れば、ここ数年は、配列を積極的に使った覚えはない。私は普通、以下のように書く。
std::vector< std::string > v = { "hello", "truly awesome C++", "world" } ;
No comments:
Post a Comment