b4f6cd7636
[SVN r50187]
83 lines
2.5 KiB
XML
83 lines
2.5 KiB
XML
<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><int,4> 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><int,4> 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>
|
|
|
|
|