
On Mon, Jun 06, 2005 at 12:22:14PM +0800, Manfred Doudar wrote:
Dave Harris wrote:
In-Reply-To: <005501c566b3$1fc76eb0$2b792518@heronnest> cdiggins@videotron.ca (christopher diggins) wrote (abridged):
I strongly disagree. Forcing initialization makes code that is not useful for high performance numerical processing. When we declare a container of 1000000 elements, we don't want to waste time initializing each, unless we want to.
I think the best solution in this case is to use an alternative "collection" for numerical processing. Using a class intended as general purpose array for numerical processing I think would not be a good idea.
I doubt we need a whole class. A special argument might do, to let us choose:
boost::array<int,1000> b( boost::uninitialised ); boost::array<int,1000> b( boost::initialised );
That's a reasonable proposition. But for the initialized case, you want to be specifying a value to initialize to - zero is *not* a reasonable default for all circumstance.
Besides which, you can already default-initialise (i.e. 0 for builtins) an array of any size: boost::array<int,1000> b = { }; which is the equivalent of: std::vector<int> v(1000); For those who would want to construct an array from a range of iterators, construct it uninitialised and use std::generate(). If you want the array to be const then copy-construct it from the return value of an inline function that uses std::generate() (or some other method). Inlining and RVO should make that pretty efficient, and if you're doing this it's probably once at startup anyway. For those who want the equivalent of: vector::vector(size_type, const value_type&); you could always use the preprocessor: boost::array<int,1000> b = { MAGIC_ARRAY_INIT(1000, 5) }; I think boost::array works fine uninitialised by default. jon