关于C++中引用降低程序可读性的问题
2013-01-13 21:47
295 查看
先举个例子,实现交换两个变量值功能的函数swap,使用指针的实现如下:
使用引用的实现如下:
显然,使用引用的实现简单明了,且不用考虑指针的概念,很好理解,但是同时不能只考虑实现的方便,也要考虑可读性,例如在程序中使用上述函数:
读了之后马上会注意到,使用swapPoint之后,i或者j的值可能会改变,因为传了指针,但是如果使用swapReferences,代码如下:
对于C程序员来说这个函数执行完,i,j的值不可能改变,因为C没有引用;对于C++不能分辨出i, j是否会变化,在一定程度上影响了可读性,使得读代码的人不知道哪个函数会对传入的参数进行改变(在代码中第一次看到一个函数名而没有去看函数定义的时候),这样非常不直观。
针对以上问题,窃以为,可以将引用和指针的调用形式统一,由编译器做出自动匹配,即调用swapReferences时也使用:
这样会提高程序的可读性,同时提高写程序的人和读程序的人的效率。
bool swapPoint(int *i, int *j) { int temp = *i; *i = *j; *j = temp; return true; }
使用引用的实现如下:
bool swapReferences(int &i, int &j) { int temp = i; i = j; j = temp; return true; }
显然,使用引用的实现简单明了,且不用考虑指针的概念,很好理解,但是同时不能只考虑实现的方便,也要考虑可读性,例如在程序中使用上述函数:
int i = 10, j = 20; swapPoint(&i, &j);
读了之后马上会注意到,使用swapPoint之后,i或者j的值可能会改变,因为传了指针,但是如果使用swapReferences,代码如下:
int i = 10, j = 20; swapReferences(i, j);
对于C程序员来说这个函数执行完,i,j的值不可能改变,因为C没有引用;对于C++不能分辨出i, j是否会变化,在一定程度上影响了可读性,使得读代码的人不知道哪个函数会对传入的参数进行改变(在代码中第一次看到一个函数名而没有去看函数定义的时候),这样非常不直观。
针对以上问题,窃以为,可以将引用和指针的调用形式统一,由编译器做出自动匹配,即调用swapReferences时也使用:
swapReferences(&i, &j);
这样会提高程序的可读性,同时提高写程序的人和读程序的人的效率。
相关文章推荐
- 关于c++ 智能指针及 循环引用的问题
- C&C++关于数组的定义,引用传参问题
- 1、C++关于拷贝构造函数和赋值运算符重载问题的测试程序。因为调用顺序不清,导致内存泄漏new delete
- 关于C++返回引用的问题
- 关于C/C++中二维数组、指针的引用等若干问题的总结
- Unity3D关于内存优化,内存泄露、多线程、引用C++的dll的问题研究
- 关于C++和Java的引用和指针的问题
- c++关于类型强转后作为引用参数的一些问题
- c++关于引用和const的一些问题
- 关于c++智能指针share_ptr的引用问题
- c++菜鸟错误笔记3关于传值与引用的问题
- 关于C++中引用&问题
- 【Android开发经验】关于主题引用混乱导致程序运行崩溃的问题
- 关于winodows下编程c++遇到的引用文件路径问题
- 【C/C++】关于引用和指针的问题
- C#中关于引用类型做参数时的若干问题及与C/C++对比
- 关于Delphi程序中互相引用的问题
- 关于c++调用rar程序压缩与解压的问题
- C++关于参数为const引用类型的函数调用参数成员函数的一个问题
- 实用程序软件包(关于使用静态函数报错问题“Static function declared but not defined in C+++ "eh.h is only for C++!"报错问题)