digitalmars.D.learn - function ref param vs pointer param
- ref2401 (17/17) Apr 24 2015 What advantages do ref params give over pointer params?
- bearophile (5/10) Apr 24 2015 ref params don't need the "*" every time you use them inside the
- ref2401 (3/3) Apr 24 2015 processPointer(&ms);
- bearophile (6/10) Apr 24 2015 C# avoids that problem requiring (in most cases) the usage of
- Steven Schveighoffer (7/24) Apr 24 2015 A ref param is somewhat safer, because you cannot do pointer arithmetic
- =?UTF-8?B?QWxpIMOHZWhyZWxp?= (7/8) Apr 24 2015 Another difference is that a ref parameter is not null and what is
- ref2401 (1/1) Apr 24 2015 Thank you
What advantages do ref params give over pointer params? struct MyStruct { string str; this(string str) { this.str = str; } } void processRef(ref MyStruct ms) { writeln("processRef: ", ms); } void processPointer(MyStruct* ms) { writeln("processPointer: ", *ms); } void main(string[] args) { auto ms = MyStruct("the ultimate answer to everythin is the number 42"); processRef(ms); processPointer(&ms); }
Apr 24 2015
ref2401:void processRef(ref MyStruct ms) { writeln("processRef: ", ms); } void processPointer(MyStruct* ms) { writeln("processPointer: ", *ms);ref params don't need the "*" every time you use them inside the function, and don't need the "&" when you call the function. Bye, bearophile
Apr 24 2015
processPointer(&ms); I think doing this way is more descriptive. Now all readers know that ms might be changed inside the function.
Apr 24 2015
On Friday, 24 April 2015 at 13:39:35 UTC, ref2401 wrote:processPointer(&ms); I think doing this way is more descriptive. Now all readers know that ms might be changed inside the function."ref" at the calling point too. But this idea was refused for D (also because it goes against UFCS chains). Bye, bearophile
Apr 24 2015
On 4/24/15 9:23 AM, ref2401 wrote:What advantages do ref params give over pointer params? struct MyStruct { string str; this(string str) { this.str = str; } } void processRef(ref MyStruct ms) { writeln("processRef: ", ms); } void processPointer(MyStruct* ms) { writeln("processPointer: ", *ms); } void main(string[] args) { auto ms = MyStruct("the ultimate answer to everythin is the number 42"); processRef(ms); processPointer(&ms); }A ref param is somewhat safer, because you cannot do pointer arithmetic on it. A ref will ALWAYS point at the same memory location, because it cannot be rebound. The compiler can also take advantage of the characteristics of ref, as it does with the -dip25 switch. -Steve
Apr 24 2015
On 04/24/2015 06:23 AM, ref2401 wrote:What advantages do ref params give over pointer params?Another difference is that a ref parameter is not null and what is referred to is not an rvalue. However, it is possible to break that expectation if a pointer is dereferenced and passed to a ref-taking function but then the actual object is gone before the reference is used. Ali
Apr 24 2015