C++,有時它的確是個耐玩的東東,就比如operator,它有兩種用法,一種是operator overloading(操作符重載),一種是operator casting(操作隱式轉換)。
1、操作符重載
C++可以通過operator實現重載操作符,格式如下:類型T operator 操作符 (),比如重載+,比如下面這個例子
template<typename T> class A
{
public:
const T operator+(const T& rhs)
{
return this->m_ + rhs;
}
private:
T m_;
};
又比如STL中的函數對象,重載(),比如下面這個例子
template<typename T> struct A
{
T operator()(const T& lhs, const T& rhs){ return lhs-rhs; }
};
2、 操作隱式轉換
C++可以通過operator實現重載隱式轉換,格式如下: operator T (),其中T是一個類型,比如下面這個例子
class A
{
public:
operator B*() { return this->b_; }
operator const B*() { return this->b_; }
operator B&() { return *this->b_; }
private:
B* b_;
};
A a;
當if(a),編譯時,它轉換成if(a.operator B*()),其實也就是相當於 if(a.b_)