這個例子只能用 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
- Dec 18 Wed 2013 15:51
ref qualifier in c++11
全站熱搜
留言列表