digitalmars.D.learn - Why D doesn't have constant function arguments?
- Artyom Shalkhakov <artyom.shalkhakov gmail.com> Apr 03 2007
- Aarti_pl <aarti interia.pl> Apr 03 2007
- Dan <murpsoft hotmail.com> Apr 03 2007
- "Jarrett Billingsley" <kb3ctd2 yahoo.com> Apr 03 2007
- Chris Nicholson-Sauls <ibisbasenji gmail.com> Apr 03 2007
Hello everyone. Could anyone answer my question? And there's another one: why there are no 'constant references' when passing arguments in D (like those in C++: const Type &), I suppose they would be quite useful for various applications (like, parameter passing for some maths functions). I think that 'inout' could be used in place of C++'s const references, but how does it work? Is this a masked pointer or something? Or maybe this is done the other way? The D Way? Thanks in advance.
Apr 03 2007
Artyom Shalkhakov napisał(a):Hello everyone. Could anyone answer my question? And there's another one: why there are no 'constant references' when passing arguments in D (like those in C++: const Type &), I suppose they would be quite useful for various applications (like, parameter passing for some maths functions).
It is work in progress. There was lot of discussion recently on d.D NG about it recently (please read Extended Type Design - first article from 2007-03-14). D will have constants which hopefully will be much better than C++/Java.I think that 'inout' could be used in place of C++'s const references, but how does it work? Is this a masked pointer or something?
AFAIK 'inout' is similar to C++ passing by reference.Or maybe this is done the other way? The D Way? Thanks in advance.
Best Regards Marcin Kuszczak (aarti_pl)
Apr 03 2007
I think that 'inout' could be used in place of C++'s const references, but how does it work? Is this a masked pointer or something?
AFAIK 'inout' is similar to C++ passing by reference.
Or maybe this is done the other way? The D Way? Thanks in advance.
It's not really a reference. It's really just that instead of: int f1(int x){ <-- makes a copy of x, puts it on the stack x += 3; <-- affects the copy on the stack, not the original return x; } int f2(inout int x){ <-- does not copy the data, uses the original register or memory location. x += 3; <-- affects the original return x; } That's the difference.
Apr 03 2007
"Dan" <murpsoft hotmail.com> wrote in message news:euua0c$21vl$1 digitalmars.com...I think that 'inout' could be used in place of C++'s const references, but how does it work? Is this a masked pointer or something?
AFAIK 'inout' is similar to C++ passing by reference.
Or maybe this is done the other way? The D Way? Thanks in advance.
It's not really a reference. It's really just that instead of: int f1(int x){ <-- makes a copy of x, puts it on the stack x += 3; <-- affects the copy on the stack, not the original return x; } int f2(inout int x){ <-- does not copy the data, uses the original register or memory location. x += 3; <-- affects the original return x; } That's the difference.
But.. isn't that exactly what reference parameters in C++ do?
Apr 03 2007
Jarrett Billingsley wrote:"Dan" <murpsoft hotmail.com> wrote in message news:euua0c$21vl$1 digitalmars.com...I think that 'inout' could be used in place of C++'s const references, but how does it work? Is this a masked pointer or something?
Or maybe this is done the other way? The D Way? Thanks in advance.
int f1(int x){ <-- makes a copy of x, puts it on the stack x += 3; <-- affects the copy on the stack, not the original return x; } int f2(inout int x){ <-- does not copy the data, uses the original register or memory location. x += 3; <-- affects the original return x; } That's the difference.
But.. isn't that exactly what reference parameters in C++ do?
Except that (as I recall, its been a while) C++ referances are part of the type, whereas D's 'inout' is just a storage class. -- Chris Nicholson-Sauls
Apr 03 2007








Chris Nicholson-Sauls <ibisbasenji gmail.com>