Why must the copy assignment operator return a reference/const reference?

Strictly speaking, the result of a copy assignment operator doesn’t need to return a reference, though to mimic the default behavior the C++ compiler uses, it should return a non-const reference to the object that is assigned to (an implicitly generated copy assignment operator will return a non-const reference – C++03: 12.8/10). I’ve seen a … Read more

Why doesn’t Java have compound assignment versions of the conditional-and and conditional-or operators? (&&=, ||=)

Reason The operators &&= and ||= are not available on Java because for most of the developers these operators are: error-prone useless Example for &&= If Java allowed &&= operator, then that code: bool isOk = true; //becomes false when at least a function returns false isOK &&= f1(); isOK &&= f2(); //we may expect … Read more

Shortcut “or-assignment” (|=) operator in Java

The |= is a compound assignment operator (JLS 15.26.2) for the boolean logical operator | (JLS 15.22.2); not to be confused with the conditional-or || (JLS 15.24). There are also &= and ^= corresponding to the compound assignment version of the boolean logical & and ^ respectively. In other words, for boolean b1, b2, these … Read more

Is it possible to overload Python assignment?

The way you describe it is absolutely not possible. Assignment to a name is a fundamental feature of Python and no hooks have been provided to change its behavior. However, assignment to a member in a class instance can be controlled as you want, by overriding .__setattr__(). class MyClass(object): def __init__(self, x): self.x = x … Read more

How to use base class’s constructors and assignment operator in C++?

You can explicitly call constructors and assignment operators: class Base { //… public: Base(const Base&) { /*…*/ } Base& operator=(const Base&) { /*…*/ } }; class Derived : public Base { int additional_; public: Derived(const Derived& d) : Base(d) // dispatch to base copy constructor , additional_(d.additional_) { } Derived& operator=(const Derived& d) { Base::operator=(d); … Read more

Understanding exactly when a data.table is a reference to (vs a copy of) another data.table

Yes, it’s subassignment in R using <- (or = or ->) that makes a copy of the whole object. You can trace that using tracemem(DT) and .Internal(inspect(DT)), as below. The data.table features := and set() assign by reference to whatever object they are passed. So if that object was previously copied (by a subassigning <- … Read more