Bug 955 – Passing arguments into functions - in, out, inout, const, and contracts

Status
RESOLVED
Resolution
FIXED
Severity
normal
Priority
P2
Component
dlang.org
Product
D
Version
D1 (retired)
Platform
All
OS
All
Creation time
2007-02-12T21:41:00Z
Last change time
2014-02-15T13:12:35Z
Keywords
spec
Assigned to
nobody
Creator
jason.james.house
Blocks
3106

Comments

Comment #0 by jason.james.house — 2007-02-12T21:41:11Z
The description of in/out/inout/lazy leaves much to be desired. There's a thread on the mailing list titled "Passing arguments into functions - in, out, inout, const, and contracts" that has a number of people attempting to give more complete descriptions. It seems like parameters fall into two categories Type 1: fundamental types, structs, fixed size arrays Type 2: variable size arrays, objects in: Type 1 - Passed by value. changes to object have no external effect Type 2 - Passed by reference. function can't change the reference but can change the object out: Type 1 - Passed by reference, initialized by default initializer Type 2 - Passed by reference, initialized by default initializer inout: Type 1 - Passed by reference, can change the reference(?) Type 2 - Passed by reference, can change the reference To me, the clarification of "in" parameters need clarification. For type 2, I'd expect the equivalant of a C++ "const T&" but that isn't the case and should really be spelled out.
Comment #1 by wbaxter — 2007-02-12T22:01:19Z
Fixed size arrays are also Type 2, passed by reference. int func(int[2] xy) { xy[0] = 1; } // modifies caller's xy[0]
Comment #2 by github-bugzilla — 2012-01-21T17:17:28Z