指针和引用
1、引用
引用就是别名,引用定义时必须初始化: int a; int &b=a; //b即为a的别名
如果不是形参,必须初始化,引用某一变量
2、指针
指针和c一样;
this指针 在类的成员函数中使用,表示当前对象;
3、右值引用
C++11 新增了一种引用
类型 && 引用名 = 右值表达式;
引入右值引用如:
int num = 10;
int &b = num; //正确 左值引用
int &c = 10; //错误
编译器允许我们为 num 左值建立一个引用,但不可以为 10 这个右值建立引用。因此,引入右值引用。
如:
int num = 10;
//int && a = num; //右值引用不能初始化为左值
int && a = 10; //右值引用
和常量左值引用不同的是,右值引用还可以对右值进行修改
int && a = 10;
a = 100;
cout << a << endl;
4、引用限定符
默认情况下,对于类中用 public 修饰的成员函数,既可以被左值对象调用,也可以被右值对象调用
某些场景中,我们可能需要限制调用成员函数的对象的类型(左值还是右值),为此 C++11 新添加了引用限定符。所谓引用限定符,就是在成员函数的后面添加 “&” 或者 “&&”,从而限制调用者的类型(左值还是右值)。
如:
class demo {
public:
demo(int num):num(num){}
int get_num()&{ //限定为右值使用int get_num()&&
return this->num;
}
private:
int num;
};
const和引用限定符
const 和引用限定符修饰类的成员函数时,都位于函数的末尾。C++11 标准规定,当引用限定符和 const 修饰同一个类的成员函数时,const 必须位于引用限定符前面
如:
class demo {
public:
demo(int num,int num2) :num(num),num2(num2) {}
//左值和右值对象都可以调用
int get_num() const &{
return this->num;
}
//仅供右值对象调用
int get_num2() const && {
return this->num2;
}
private:
int num;
int num2;
};
注意,引用限定符不适用于静态成员函数和友元函数文章来源:https://www.toymoban.com/news/detail-607908.html
代码实例:文章来源地址https://www.toymoban.com/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) {}
//左值和右值对象都可以调用
int get_num() const &{
return this->num;
}
//仅供右值对象调用
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
到了这里,关于C++[第五章]--指针和引用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!