How does D distnguish managed pointers from raw pointers?
H. S. Teoh
hsteoh at quickfur.ath.cx
Fri Oct 4 18:53:30 UTC 2019
On Fri, Oct 04, 2019 at 11:43:34AM -0700, H. S. Teoh via Digitalmars-d-learn wrote:
> On Fri, Oct 04, 2019 at 06:34:40PM +0000, Dennis via Digitalmars-d-learn wrote:
> > On Friday, 4 October 2019 at 18:30:17 UTC, IGotD- wrote:
> > > What if you pass a static array to a function that expects a
> > > dynamic array. Will D automatically create a dynamic array from
> > > the static array?
> >
> > No, you have to append [] to create a slice from the static array.
>
> Actually, it *does* automatically convert the static array to a slice.
[...]
Here's an actual working example that illustrates the pitfall of this
implicit conversion:
-----
struct S {
int[] data;
this(int[] _data) { data = _data; }
}
S makeS() {
int[5] data = [ 1, 2, 3, 4, 5 ];
return S(data);
}
void func(S s) {
import std.stdio;
writeln("s.data = ", s.data);
}
void main() {
S s = makeS();
func(s);
}
-----
Expected output:
s.data = [1, 2, 3, 4, 5]
Actual output:
s.data = [-2111884160, 32766, 1535478075, 22053, 5]
T
--
MSDOS = MicroSoft's Denial Of Service
More information about the Digitalmars-d-learn
mailing list