Interested in D, spec confuses me.
bubbasaur via Digitalmars-d
digitalmars-d at puremagic.com
Tue Feb 2 16:31:58 PST 2016
On Tuesday, 2 February 2016 at 23:41:07 UTC, H. S. Teoh wrote:
> Now, the same argument applies if immutable was used in place
> of const. However, the last line in main() illustrates why we
> need const rather than immutable in this case: we actually
> *want* to modify d.x in main(). We just don't want func2 to
> touch anything. So we can't use immutable -- since immutable
> means *nobody* can touch the data. So, const provides both the
> guarantee that func2 won't touch the data, thus allowing the
> aforementioned optimization, and also continues to let main()
> mutate the data at its leisure.
Ok, but what would differ using immutable instead of const in
your example (AS ARGUMENTS)?
See:
import std.stdio;
struct Data { int x; }
auto func1(Data* d) { return d.x; }
auto func2(const(Data)* d) { return d.x; }
auto func3(immutable(Data)* d) { return d.x; }
void main() {
Data d;
auto value1 = d.x*func1(&d) + d.x;
auto value2 = d.x*func2(&d) + d.x;
auto value3 = d.x*func3(cast(immutable)&d) + d.x;
d.x++;
writeln(d.x++);
}
Functions 2 and 3 are acting in the same way and different from
what you said I can change the d.x in main.
Bubba.
More information about the Digitalmars-d
mailing list