您的位置:首页 > 编程语言 > C语言/C++

C++的const引用

2013-11-21 20:37 162 查看
刚开始学习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将不会被修改。

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: