C++的const引用

来源:互联网 发布:mac svn客户端使用教程 编辑:程序博客网 时间:2024/06/05 00:53

刚开始学习C++, 看到了C++的引用,有些地方不太理解,经过了些许思考,现做如下总结:


const引用只是给普通变量起一个别名而已:

1. 将非const变量赋值给非const引用:    

void test2(){int i   = 1;int &j = i;printf("%d\n", j);i = 10;printf("%d\n", j);}
执行结果: 1

                  10

在这里i,j只不过是对同一段内存空间的不同标记而已。

2. 将非const变量赋值给const引用:  

void test2(){int i  = 1;const int &j = i;printf("%d\n", j);i = 10;printf("%d\n", j);}

执行结果: 1

                  10

在这里i,j同样是对同一段内存空间的不同标记,但是因为j是const引用,所以不能改变j的指向。但由于j始终和i指向同一段内存,当i改变时j也会随之改变。


3. 将const变量赋值给非const引用:

void test3(){const int i  = 1;int &j = i;}

很遗憾,不能这样做,不能将一个const变量赋值给非const引用。


4. 将const变量赋值给const引用:

void test4(){const int i  = 1;const int &j = i;}

在这种情况下由于i,j都是const的所以不能被修改。


5. 将常量赋值给非const引用:

void test5(){int &i  = 1;}

 很遗憾,不能这样做,不能将一个常量赋值给非const引用!

6. 将常量赋值给const引用:

void test6(){const int &i  = 1;}

可以将一个常量赋值给const引用!

7. 将不同类型的值赋值给const引用:

void test5(){double i = 3.14;const int &j = i;printf("%p\n", j);i = 20.2;printf("%p\n", j);}

执行结果: 3

                  3

为什么不是20呢?这是由于将一个double类型的值转换为int类型时编译器相当于做了一次中转:

double i      = 3.14;

int   tmp = double ; // tmp = 3

const int &j = tmp;

此时j,tmp指向同一段内存空间,由于我们无法修改tmp,所以j将不会被修改。

 










原创粉丝点击