刚开始学习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也会随之改变。
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将不会被修改。
本文详细解析了C++中引用的概念,特别是const引用的使用规则,包括不同情况下的赋值及引用的变化行为,并通过实例演示了各种引用的有效性和限制。
888

被折叠的 条评论
为什么被折叠?



