inout question

lobo swamp.lobo at gmail.com
Mon Feb 12 22:18:53 UTC 2018


On Monday, 12 February 2018 at 05:37:23 UTC, ketmar wrote:
> Norm wrote:
>
>> Hi,
>>
>> I'm new to D so can someone explain to me what is happening 
>> here?
>>
>>
>> void func(const char* s, char** e) {
>>      import core.stdc.stdlib;
>>      auto result = strtod(s, e);
>> }
>>
>> Error: function core.stdc.stdlib.strtod (scope inout(char)* 
>> nptr, scope inout(char)** endptr) is not callable using 
>> argument types (const(char*), char**)
>
> there is a difference between `const char* s`, and 
> `const(char)* s`.
> the former means that both `s` and `*s` cannot change, the 
> latter means that `s` can be changed, but `*s` cannot. i.e. the 
> first form means that you cannot do pointer arithmetic with 
> `s`, while with second form you can (only *contents* are const, 
> not the pointer itself).
>
> that is, `strtod` wants const *contents*, but not pointer. 
> `const(char)* s`.

I tried variations of const (char)* s, ... etc. and then stupidly 
realised the problem was with the second parameter 'e'. inout 
does behave the way I expected, I was just looking at the wrong 
parameter.

My silly mistake but thanks for your reply.

Cheers,
Norm



More information about the Digitalmars-d-learn mailing list