const ref in opAssign
monarch_dodra
monarch_dodra at gmail.com
Tue Jun 26 05:44:45 PDT 2012
I just finished reading the chapters on user defined types and,
(as a C++ dev), this one line struc out to me as very odd:
"ref Widget opAssign(ref Widget rhs) {..}"
This means that during an assignment, I could potentially change
"Other" (!). This seems like a blatant violation of the expected
behavior of =. What's more, it prevents the assignment from a
const object...
I am very tempted to change the call to "const ref". Is this
un-advised?
Mr. Alexandrescu goes on to mention a "pass by value" in case you
wanted to assign from a temporary, mentioning:
w = Widget(50); // Error!
// Cannot bind an rvalue of type Widget to ref Widget!
The only problem is that if I do this, all of my calls are then
re-routed to pass by value, and none to the pass-by-const-ref.
----
Is there any way to enforce const correctness, while still
keeping advantage of both calls?
PS: using Mr. Alexandrescu's design, it is not possible to assign
from a const Widget, I get:
hello.d(50): Error: function hello.Widget.opAssign (Widget rhs)
is not callable using argument types (const(Widget))
hello.d(50): Error: cannot implicitly convert expression (w2) of
type const(Widget) to Widget
const can't be passed by value...?
More information about the Digitalmars-d
mailing list