On Saturday, 11 June 2022 at 01:52:58 UTC, Mike Parker wrote:
...
That's because static arrays are allocated as part of the instance:
...

Yes I understood the problem, but the naive me was thinking that in this example:

struct S{
    int[] arr = new int[](5);
}

For some reason this would be transformed as a statically "int[5] arr" in the case of structs.

But now I see that's not the case and "arr" points to whatever was allocated by "new", and will share across the instances of S (Since it's the same address).

... So would you then really want a warning every time you initialize a static array field?

Well would this be annoying? Yes, mainly if I already know this, but if not, then it would be like a nice to know warning for newbies like myself. By the way this would be only in the cases that a static array field being initialized with dynamic allocation like in the case of struct declaration, not on every place.

...
So the question in each case would be, where's the line between helpful and annoying?

Well I like to think about this like the "-Wall" flag in C compilers, you need to go for it, and you just dismiss the warning in such case if you don't agree or know what you're doing.

...
The compiler should be as helpful as it can, but it has to be helpful without getting in the way. There's a significant amount of learning by trial and error in any programming language. So I think there has to be a distinction between things like "easy to do by accident even when you know the deal" and "once you learn it, you're unlikely to do it again".

Yes no doubt about it, by the way like I said, I never used this form to initialize fields in structs, I always used the "T[n] member", but in this particular case the result would have been very different from what I expected.

Anyway I'm always lurking around this Forum and learning new things.

Thanks,

Matheus.

PS: I'm ESL so sorry for my English mistakes.

Reply via email to