On Monday, 6 May 2013 at 15:15:47 UTC, Steven Schveighoffer wrote:
On Sat, 04 May 2013 14:11:02 -0400, jerro <[email protected]> wrote:

Is there a way to avoid default initializing a struct field in D? The following doesn't seem to work:

struct Foo
{
    int[42] buffer = void;
    int bar;
}

I know I can do this:

Foo foo = void

But then all fields are uninitialized.

Foo.init must exist, and be filled with *something*. Is it useful to FORCE buffer to not have 0 values? Or is it that you don't care what it has? In the latter, is it terrible that it's 0?

I don't care what it contains, I just want to avoid
initialization for performance reasons. I have something like
this:

struct Foo(size_t maxNItems)
{
     Item[maxNItems] buffer;
     size_t nItems;
     size_t addItem(...){ ... }
     void processItems(...){...}
}

The user of Foo can add up to maxNItems items and then run some
algorithm on them. Now say that Foo needs to support up to, say,
a thousand items, but in most cases just a few of them will be
added. In this case default initialization can take way more time
than the actual algorithm.

Reply via email to