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