指針和引用
1、引用
引用就是別名,引用定義時必須初始化: int a; int &b=a; //b即為a的別名
如果不是形參,必須初始化,引用某一變量
2、指針
指針和c一樣;
this指針 在類的成員函數(shù)中使用,表示當(dāng)前對象;
3、右值引用
C++11 新增了一種引用
類型 && 引用名 = 右值表達(dá)式;
引入右值引用如:
int num = 10;
int &b = num; //正確 左值引用
int &c = 10; //錯誤
編譯器允許我們?yōu)?num 左值建立一個引用,但不可以為 10 這個右值建立引用。因此,引入右值引用。
如:
int num = 10;
//int && a = num; //右值引用不能初始化為左值
int && a = 10; //右值引用
和常量左值引用不同的是,右值引用還可以對右值進(jìn)行修改
int && a = 10;
a = 100;
cout << a << endl;
4、引用限定符
默認(rèn)情況下,對于類中用 public 修飾的成員函數(shù),既可以被左值對象調(diào)用,也可以被右值對象調(diào)用
某些場景中,我們可能需要限制調(diào)用成員函數(shù)的對象的類型(左值還是右值),為此 C++11 新添加了引用限定符。所謂引用限定符,就是在成員函數(shù)的后面添加 “&” 或者 “&&”,從而限制調(diào)用者的類型(左值還是右值)。
如:
class demo {
public:
demo(int num):num(num){}
int get_num()&{ //限定為右值使用int get_num()&&
return this->num;
}
private:
int num;
};
const和引用限定符
const 和引用限定符修飾類的成員函數(shù)時,都位于函數(shù)的末尾。C++11 標(biāo)準(zhǔn)規(guī)定,當(dāng)引用限定符和 const 修飾同一個類的成員函數(shù)時,const 必須位于引用限定符前面
如:
class demo {
public:
demo(int num,int num2) :num(num),num2(num2) {}
//左值和右值對象都可以調(diào)用
int get_num() const &{
return this->num;
}
//僅供右值對象調(diào)用
int get_num2() const && {
return this->num2;
}
private:
int num;
int num2;
};
注意,引用限定符不適用于靜態(tài)成員函數(shù)和友元函數(shù)文章來源:http://www.zghlxwxcb.cn/news/detail-607908.html
代碼實例:文章來源地址http://www.zghlxwxcb.cn/news/detail-607908.html
#if 1
#include <iostream>
using namespace std;
int add_one(int a)
{
a = a+1;
return a;
}
int add_one(int *a)
{
*a = *a + 1;
return *a;
}
int add_one_ref(int &b) //引用
{
b = b+1;
return b;
}
int main(int argc, char **argv)
{
int a = 99;
int &c = a;
cout<<"add_one(a)="<<add_one(a)<<endl;
cout<<"a = "<<a<<endl;
cout<<"add_one(&a)"<<add_one(&a)<<endl;
cout<<"a = "<<a<<endl;
cout<<"add_one_ref(a)"<<add_one_ref(a)<<endl;
cout<<"a = "<<a<<endl;
c++;
cout<<"a = "<<a<<endl;
cout<<"c = "<<c<<endl;
c=c+10;
cout<<"c = "<<c<<endl;
cout<<"a = "<<a<<endl;
return 0;
}
#else
#include <iostream>
using namespace std;
class demo {
public:
demo(int num,int num2) :num(num),num2(num2) {}
//左值和右值對象都可以調(diào)用
int get_num() const &{
return this->num;
}
//僅供右值對象調(diào)用
int get_num2() const && {
return this->num2;
}
private:
int num;
int num2;
};
int main() {
demo a(10,20);
cout << a.get_num() << endl; // 正確
cout << move(a).get_num() << endl; // 正確
//cout << a.get_num2() << endl; // 錯誤
cout << move(a).get_num2() << endl; // 正確
return 0;
}
#endif
到了這里,關(guān)于C++[第五章]--指針和引用的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!