| <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> |
| |
| |