Conversion string->int

Jonathan M Davis via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sat Jun 7 14:25:45 PDT 2014


On Sat, 07 Jun 2014 20:53:02 +0000
Paul via Digitalmars-d-learn <digitalmars-d-learn at puremagic.com> wrote:

> I can not understand, why this code works:
>
>      char s[2] = ['0', 'A'];
>      string ss = to!string(s);
>      writeln(parse!uint(ss, 16));
>
> but this can deduces template:
>
>      char s[2] = ['0', 'A'];
>      writeln(parse!uint(to!string(s), 16));
>
> What's the reason? And what is the right way to parse
> char[2]->int with radix?

std.conv.to converts the entire string at once. std.conv.parse takes the
beginning of the string until it finds whitespace, and converts that first
part of the string. And because it does that, it takes the string by ref so
that it's able to actually pop the elements that it's converting off of the
front of the string, leaving the rest of the string behind to potentially be
parsed as something else, whereas because std.conv.to converts the whole
string, it doesn't need to take its argument by ref.

So, what's causing you trouble you up is the ref, because if a parameter is a
ref parameter, then it only accepts lvalues, so you have to pass it an actual
variable, not the result of to!string. Also,

    string s = ['A', '0'];

will compile, so you don't need to use to!string in this case.

- Jonathan M Davis


More information about the Digitalmars-d-learn mailing list