隐式赋值运算符
implicit assignment operators
如果我的 class 上有运算符重载,是否也隐式创建了运算符的赋值版本?
class square{
square operator+(const square& B);
void operator=(const square& B);
};
比如,我可以打电话给
square A, B;
A += B;
编译器隐式决定调用 operator+
然后 operator=
?
否,+=
必须明确定义。
作为旁注,operator+
should usually create a new object:
square operator+(const square& B);
和operator=
should return a reference to *this
:
square& operator=(const square& B);
还值得注意的是 operator+
通常根据 operator+=
来实现,即 operator+
在新副本上调用 operator+=
。
否 operator+=
是它自己的运算符,必须明确定义。
请注意 operator+
应该 return 一个新对象而不是对原始对象的引用。原始对象应保持不变。
operator+=
应该 return 添加了所需值的原始对象。 operator+=
通常更可取,因为它消除了临时对象。
不,运算符不是隐式定义的。但是,boost/operators.hpp
定义了有用的辅助模板以避免样板代码。他们文档中的示例:
If, for example, you declare a class like this:
class MyInt
: boost::operators<MyInt> {
bool operator<(const MyInt& x) const;
bool operator==(const MyInt& x) const;
MyInt& operator+=(const MyInt& x);
MyInt& operator-=(const MyInt& x);
MyInt& operator*=(const MyInt& x);
MyInt& operator/=(const MyInt& x);
MyInt& operator%=(const MyInt& x);
MyInt& operator|=(const MyInt& x);
MyInt& operator&=(const MyInt& x);
MyInt& operator^=(const MyInt& x);
MyInt& operator++();
MyInt& operator--(); };
then the operators<>
template adds more than a dozen additional operators, such as operator>
, <=
, >=
, and
(binary) +
. Two-argument forms of the templates are also provided to
allow interaction with other types.
此外,还支持隐式 "deducing" 使用 arithmetic operator templates 的一组特定运算符。
如果我的 class 上有运算符重载,是否也隐式创建了运算符的赋值版本?
class square{
square operator+(const square& B);
void operator=(const square& B);
};
比如,我可以打电话给
square A, B;
A += B;
编译器隐式决定调用 operator+
然后 operator=
?
否,+=
必须明确定义。
作为旁注,operator+
should usually create a new object:
square operator+(const square& B);
和operator=
should return a reference to *this
:
square& operator=(const square& B);
还值得注意的是 operator+
通常根据 operator+=
来实现,即 operator+
在新副本上调用 operator+=
。
否 operator+=
是它自己的运算符,必须明确定义。
请注意 operator+
应该 return 一个新对象而不是对原始对象的引用。原始对象应保持不变。
operator+=
应该 return 添加了所需值的原始对象。 operator+=
通常更可取,因为它消除了临时对象。
不,运算符不是隐式定义的。但是,boost/operators.hpp
定义了有用的辅助模板以避免样板代码。他们文档中的示例:
If, for example, you declare a class like this:
class MyInt
: boost::operators<MyInt> {
bool operator<(const MyInt& x) const;
bool operator==(const MyInt& x) const;
MyInt& operator+=(const MyInt& x);
MyInt& operator-=(const MyInt& x);
MyInt& operator*=(const MyInt& x);
MyInt& operator/=(const MyInt& x);
MyInt& operator%=(const MyInt& x);
MyInt& operator|=(const MyInt& x);
MyInt& operator&=(const MyInt& x);
MyInt& operator^=(const MyInt& x);
MyInt& operator++();
MyInt& operator--(); };
then the
operators<>
template adds more than a dozen additional operators, such asoperator>
,<=
,>=
, and (binary)+
. Two-argument forms of the templates are also provided to allow interaction with other types.
此外,还支持隐式 "deducing" 使用 arithmetic operator templates 的一组特定运算符。