[C++学习笔记]const引用

来源:互联网 发布:网络投资 编辑:程序博客网 时间:2024/05/17 22:49

一、左值与右值

左值:能出现在赋值运算符左边或者右边的表达式

右值:只能出现在赋值运算符右边的表达式

 

二、const引用

示例一: 

#include <iostream>using namespace std;int main(){const int val=3;int &ri=val;cout << ri << endl;return 0;}

以上这段代码是错误的。

解释:因为val是const的常量,而紧接着声明了一个非常量的引用ri,引用可以理解为别名,那么ri不是常量,也就是说如果修改ri的值,那么val的值也会被修改,而val是常量,修改是不被允许的。

 

示例二:

#include <iostream>using namespace std;int main(){int val=3;const int &ri=val;val=4;cout << ri << endl << val << endl;return 0;}

程序运行结果:

4

4

解释:val是变量,初值为3,而ri是val的引用,该实例中,修改ri的值是不可以的,也就是说不能写诸如“ri=4”这样的表达式。

而val=4,也就修改了val的值,自然修改了ri的值。

 

示例三:

#include <iostream>using namespace std;int main(){double val=3.0;const int &ri=val;val=4;cout << ri << endl << val << endl;return 0;}

程序运行结果:

3

4

解释:这个程序与示例二唯一不同的地方就是在于第六行声明的val是double类型,而const引用是int类型。

那么编译器在这时候就会自动将程序等价的修改为:

#include <iostream>using namespace std;int main(){double val=3.0;int temp;temp=val;const int &ri=temp;val=4;cout << ri << endl << val << endl;return 0;}


由此看来,首先程序将temp初始化为val的值,然后声明一个const引用ri,此时,修改val的值,不会改变temp的值,也就不会改变ri的值了。

因此,程序执行结果是3和4.

 

另外,const引用还可以将引用初始化为右值,也就是说可以这样写:

const int &ri=11;

而非const引用则不可以将引用初始化为右值,也就是说如果这样写:

int &ri=11;

则是非法的。

原创粉丝点击