這個例子只能用 c++11 , c++0x compiler 會失敗 !!!

ref qualifier 是限制 lvalue 或是 rvalue 存取 function 時使用 , 你想要一個 function 給 lvalue object 使用 ,
就加上 "&" 在 function 後面 , 想要讓 rvalue object 使用 則加上 "&&" , sample 如下 :

class Mars
{
private:
    int isize ;
    double* p ;
public :
    Mars(int isize_):isize(isize_),p(new double[isize_]){}
    ~Mars() { delete []p ; }
    double& operator[](int i) &
    {
        cout << "lvalue no const" << endl ;
        return p[i] ;
    }
    const double& operator[](int i) const &
    {
        cout << "lvalue with const" << endl ;
        return p[i] ;
    }
    double& operator[](int i) &&
    {
        cout << "rvalue no const" << endl ;
        return p[i] ;
    }
} ;

Mars f1()
{
    Mars m(1) ;
    m[0] = 1000.0 ;
    return m ;
}

void f2(const Mars& m)
{
    double dx ;
    dx = m[0] ;
}

int main()
{
    double dx ;
    dx = f1()[0] ;
    cout << "dx=" << dx << "============================" << endl ;
    Mars m(1) ;
    f2(m) ;
}


output :

lvalue no const
rvalue no const
dx=1000============================
lvalue with const

創作者介紹
創作者 hedgezzz 的頭像
hedgezzz

hedgezzz的部落格

hedgezzz 發表在 痞客邦 留言(0) 人氣()