opAssign and const?
Era Scarecrow
rtcvb32 at yahoo.com
Fri May 4 13:47:07 PDT 2012
On Friday, 4 May 2012 at 20:35:57 UTC, Era Scarecrow wrote:
> Well the result seems to be true enough.. It also seems to
> work if both are const. Why didn't I consider that before?
> Maybe it should be noted in the next TDPL book.
As I look at my code I realize why now. Pointers and arrays...
that's why...
test.d(16): Error: cannot implicitly convert expression (x2.y) of
type const(int[]) to int[]
Which is why I was trying to suggest the ref was const since I
wasn't modifying and could ensure it (just copying between
buffers) but the temporary I'm taking over.. So that doesn't work
now.
This means I'll likely need 2 copies of the ref; 1 const and 1
non-const.
import std.stdio;
import std.conv;
struct X {
int x;
int[] y;
this (int x1, int y1) {
x = x1; y ~= y1;
}
//const here won't work.
ref X opAssign(const X x2) {
writeln("from temporary?");
x=x2.x;
y=x2.y; //breaks here
return this;
}
ref X opAssign(ref const X x2) {
writeln("copy specific values?");
x=x2.x;
y[]=x2.y[];
return this;
}
}
X fn() {
return X(1,2);
}
void main()
{
X x = X(3,4);
X y = X(5,6);
x = y;
writeln("Should selectively copy (ref)- ", to!string(x));
x = fn();
writeln("should overwrite all - ", to!string(x));
}
More information about the Digitalmars-d-learn
mailing list