C++的const引用
2013-11-21 20:37
162 查看
刚开始学习C++, 看到了C++的引用,有些地方不太理解,经过了些许思考,现做如下总结:
const引用只是给普通变量起一个别名而已:
1. 将非const变量赋值给非const引用:
10
在这里i,j只不过是对同一段内存空间的不同标记而已。
2. 将非const变量赋值给const引用:
执行结果: 1
10
在这里i,j同样是对同一段内存空间的不同标记,但是因为j是const引用,所以不能改变j的指向。但由于j始终和i指向同一段内存,当i改变时j也会随之改变。
3. 将const变量赋值给非const引用:
很遗憾,不能这样做,不能将一个const变量赋值给非const引用。
4. 将const变量赋值给const引用:
在这种情况下由于i,j都是const的所以不能被修改。
5. 将常量赋值给非const引用:
很遗憾,不能这样做,不能将一个常量赋值给非const引用!
6. 将常量赋值给const引用:
可以将一个常量赋值给const引用!
7. 将不同类型的值赋值给const引用:
执行结果: 3
3
为什么不是20呢?这是由于将一个double类型的值转换为int类型时编译器相当于做了一次中转:
double i = 3.14;
int tmp = double ; // tmp = 3
const int &j = tmp;
此时j,tmp指向同一段内存空间,由于我们无法修改tmp,所以j将不会被修改。
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将不会被修改。
相关文章推荐
- C++中的const变量和引用
- 例子解析C++的引用,传参,const的相关特点
- c++ const引用与const指针
- C++引用与const引用
- C++_引用_结构体_C和C++相互调用_const
- C++ 底层const&顶层const与引用
- C++cosnt总结,捎带总结指针引用 define和const
- C++ 引用、指针、const
- c++之指针,引用,const
- C++中 引用 和 const
- C++ const引用详解
- C++箴言:用传引用给const取代传值
- C++ const引用详解
- 根据C++标准,如果const的引用被初始化为对一个临时变量的引用,那么它会使这个临时变量的生命期变得和它自己一样
- C++引用与const引用
- c和c++中const,指针和引用
- C++中const修饰基本数据类型、指针、引用、对象
- C++ 使用const 引用传递参数
- C++引用与const引用
- [C++学习笔记]const引用