blob: e2a90174c4bd1ec927d7d6f92720630aa51b4d1a [file] [log] [blame]
<section id="array.rationale">
<title>Design Rationale</title>
<para>
There was an important design tradeoff regarding the
constructors: We could implement array as an "aggregate" (see
Section 8.5.1, [dcl.init.aggr], of the C++ Standard). This would
mean:
<itemizedlist>
<listitem>
<simpara>
An array can be initialized with a
brace-enclosing, comma-separated list of initializers for the
elements of the container, written in increasing subscript
order:
</simpara>
<programlisting>
<classname>boost::array</classname>&lt;int,4&gt; a = { { 1, 2, 3 } };
</programlisting>
<simpara>
Note that if there are fewer elements in the
initializer list, then each remaining element gets
default-initialized (thus, it has a defined value).
</simpara>
</listitem>
</itemizedlist>
</para>
<para>
However, this approach has its drawbacks: <emphasis
role="bold">
passing no initializer list means that the elements
have an indetermined initial value
</emphasis>, because the rule says
that aggregates may have:
<itemizedlist>
<listitem>
<simpara>No user-declared constructors.</simpara>
</listitem>
<listitem>
<simpara>No private or protected non-static data members.</simpara>
</listitem>
<listitem>
<simpara>No base classes.</simpara>
</listitem>
<listitem>
<simpara>No virtual functions.</simpara>
</listitem>
</itemizedlist>
</para>
<para>Nevertheless, The current implementation uses this approach.</para>
<para>
Note that for standard conforming compilers it is possible to
use fewer braces (according to 8.5.1 (11) of the Standard). That is,
you can initialize an array as follows:
</para>
<programlisting>
<classname>boost::array</classname>&lt;int,4&gt; a = { 1, 2, 3 };
</programlisting>
<para>
I'd appreciate any constructive feedback. <emphasis
role="bold">
Please note: I don't have time to read all boost
mails. Thus, to make sure that feedback arrives to me, please send
me a copy of each mail regarding this class.
</emphasis>
</para>
<para>
The code is provided "as is" without expressed or implied
warranty.
</para>
</section>