2010-09-23

あやうくアグリゲートにとんでもない嘘を書くところだった

すべての配列はアグリゲートである。ところが、今執筆している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

You can use some HTML elements, such as <b>, <i>, <a>, also, some characters need to be entity referenced such as <, > and & Your comment may need to be confirmed by blog author. Your comment will be published under GFDL 1.3 or later license with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.