Thread overview | |||||||
---|---|---|---|---|---|---|---|
|
April 03, 2007 Why D doesn't have constant function arguments? | ||||
---|---|---|---|---|
| ||||
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. |
April 03, 2007 Re: Why D doesn't have constant function arguments? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Artyom Shalkhakov | 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) |
April 03, 2007 Re: Why D doesn't have constant function arguments? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Aarti_pl | > > 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. |
April 03, 2007 Re: Why D doesn't have constant function arguments? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Dan | "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? |
April 03, 2007 Re: Why D doesn't have constant function arguments? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jarrett Billingsley | 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?
>>> 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?
>
>
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
|
Copyright © 1999-2021 by the D Language Foundation