关闭

一、C++ 引用、常引用、const

标签: C++引用常引用const
314人阅读 评论(0) 收藏 举报
分类:

C++ 引用、常引用、const

本节介绍的知识点较简单,可以拉到最下面看小结的内容。

一、基本概念

引用的定义:
类型名 & 引用名 = 某变量名;

int n = 4;
int & r = n; // r引用了 n, r的类型是 int &

某个变量的引用, 等价于这个变量,相当于该变量的一个别名。

定义引用时一定要将其初始化成引用某个变量(且只能是变量),初始化后,它就一直引用该变量,不会再引用别的变量了。

二、使用示例

double a = 4, b = 5;
double & r1 = a;
double & r2 = r1; // r2也引用 a
r2 = 10;
cout << a << endl; // 输出 10
r1 = b; // r1并没有引用b,只是进行赋值操作
cout << a << endl; //输出 5

三、应用示例

3.1 交换整型值

C语言中,交换两个整型变量值的函数需要如此编写:

void swap( int * a, int * b)
{
int tmp;
tmp = * a; * a = * b; * b = tmp;
}
int n1, n2;
swap(& n1,& n2) ; // n1,n2的值被交换

有了C++的引用,这个函数就可以简化成这样:

void swap( int & a, int & b)
{
int tmp;
tmp = a; a = b; b = tmp;
}
int n1, n2;
swap(n1,n2) ; // n1,n2的值被交换

3.2 作为函数的返回值

int n = 4;
int & SetValue() { return n; }
int main()
{
SetValue() = 40;
cout << n;
return 0;
} //输出: 40

四、常应用

4.1 基本概念

定义引用时,前面加const关键字,即为“常引用”

int n;
const int & r = n; //r 的类型是 const int &

4.2 常引用的作用

不能通过常引用去修改其引用的内容:

int n = 100;
const int & r = n;
r = 200; //编译错
n = 300; // 没问题

4.3 常引用和非常引用的转换

const T & 和T & 是不同的类型。

T & 类型的引用或T类型的变量可以用来初始化const T & 类型的引用。const T 类型的常变量和const T & 类型的引用则不能用来初始化T &类型的引用,除非进行强制类型转换。

五、const

const关键字常用语定义常量、常量指针等场合。

5.1 定义常量

const int MAX_VAL = 65536const string SCHOOL_NAME = “C++ learning”;

5.2 常量指针

被const修饰过的指针,称为常量指针,这时指针不可以修改其指向的内容

int n,m;
const int * p = & n;
* p = 5; //编译出错
n = 4; //ok
p = &m; //ok, 常量指针的指向可以变化

也不可以把常量指针赋值给非常量指针,反过来就可以

const int * p1; int * p2;
p1 = p2; //ok
p2 = p1; //error
p2 = (int * ) p1; //ok,强制类型转换

5.3 常量指针的应用场合

函数参数为常量指针时,可避免函数内部不小心改变参数指针所指向的内容。

void MyPrintf( const char * p )
{
strcpy( p,"this"); //编译出错
printf("%s",p); //ok
}

六、小结

6.1 引用、常引用

类型名 & 引用名 = 某变量名;
int & r = n;

可以使用上述格式来定义并初始化一个引用,引用可以直接修改被引用的变量的值(类似于指针),可应用于交换整型值函数等场合。如果不希望引用修改变量的值,可以使用关键字const,把它变为常引用。

6.2 const

const int MAX_VAL = 65536; //定义常量

int n;
const int * p = & n; //常量指针

const常用于定义常量、常量指针,常量指针可避免指向的内容不小心被用户更改

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:34329次
    • 积分:1171
    • 等级:
    • 排名:千里之外
    • 原创:86篇
    • 转载:0篇
    • 译文:0篇
    • 评论:6条
    最新评论