How would it be different from defining a default constructor? Structs specifically _don't_ have default constructors, because init must be known at compile time, and all kinds of restrictions would have to be placed on a default constructor (enough to make it pointless) to ensure that it would work as an init value that there's really no point to it. The kind of stuff that you'd want to do in a default constructor but can't do by directly initializing the member variables is precisely the kind of stuff that you _can't_ do with a struct, because init must be known at compile time, must
always generate the same result, couldn't throw exceptions, etc.

So, sure, at times it would be great to have a default constructor for structs, but other design decisions in the language (particularly with regards to init) simply make that infeasible. It's one of those "forced faults" in
language design that Andrei likes to talk about.

So, what we get is an init value defined by how the member variables are directly initialized and the ability to define a static opCall to get you the equivalent of the default constructor in cases where S() is used rather than S.init. It's not perfect, but there's not much that we can do about it.

- Jonathan M Davis

My idea was to declare your own .init in a class, not in a struct.


Reply via email to