C/C++函数形参包含字符&以及const
来源:互联网 发布:手机显示yy网络不给力 编辑:程序博客网 时间:2024/05/01 08:50
C/C++函数形参包含字符&以及const
假定现在有个函数声明:
void foo(const int &a)
这里的const以及&有什么作用呢?
考虑如下四种情形:
void foo(int a)
void foo(const int a)
void foo(int &a)
void foo(const int &a)
下面我们一一进行对比:
情形1:
#include <iostream>using namespace std;void foo(int a){ /*这里的变量a仅仅是main作用域中变量a的一个副本,一个copy,对于副本的修改,不会影响到main作用域中变量a的值*/ a = 10; }int main(){ int a = 20; cout<<a<<endl; foo(a); cout<<a<<endl; return 0;}
情形2:
#include <iostream>using namespace std;void foo(const int a){ /*对const类型的变量进行修改将会出错*/ a = 10; }int main(){ int a = 20; cout<<a<<endl; foo(a); cout<<a<<endl; return 0;}[jiang@eb50 04]$ g++ -o main main.C main.C: In function ‘void foo(int)’:main.C:8: 错误:assignment of read-only parameter ‘a’
情形3:
#include <iostream>using namespace std;void foo(int &a) { /*此时a是引用传递,所以,修改foo中的a实际是修改main作用域中的a,换句话说,foo中与main中的a是同一个*/ /*在main中进行foo(a);调用时没有为a创建新的变量(如果是值传递,那么将创建新的变量并将现有变量的值copy到新变量中)*/ a = 10; }int main(){ int a = 20; cout<<a<<endl; foo(a); cout<<a<<endl; return 0;}[jiang@eb50 04]$ g++ -o main main.C [jiang@eb50 04]$ ./main 2010
情形4:
#include <iostream>using namespace std;void foo(const int &a) { //a = 10;}int main(){ int a = 20; cout<<a<<endl; foo(a); cout<<a<<endl; return 0;}
现在总结下:
在形参中用const修饰的变量,无论其是否是引用都不能被修改;
形参中变量前加字符&代表引用传递,也即:在主调函数调用被调函数时,不再建立形参的副本,而是直接把引用传递过去,类似将指针传递过去,对引用的修改将会反映到主调函数中。
加上&可以节省空间,提高效率,尤其是当参数为复杂的数据类型时尤为有用~但是又担心,万一不小心修改了,那岂不是会影响主调函数吗?那就加上const吧,就是上面的情形4,既具有引用传递的优点,还可以防止不小心修改错误。
如果我解释得不清楚,可以参考:
http://bbs.csdn.net/topics/320068352
本文也是来源于这边文章进行试验所得~
参考资料:
1.http://bbs.csdn.net/topics/320068352
0 0
- C/C++函数形参包含字符&以及const
- C语言 - 查找包含字符位置函数的使用
- C++:函数名后加const
- c++const函数
- c++const成员函数
- C++:函数名后加const
- C++const函数和const对象
- C/C++ 函数const形参
- C++,函数后面带const
- <cctype> C字符函数
- C/C++字符函数
- c 字符操作函数
- c 字符操作函数
- C++,string中包含中文和英文以及其他语言文字,怎么可以分出中文字符和英文字符。
- const的位置以及区别(C++)
- C++const注意点以及用法
- C/C++ 中& * const与 const * 以及volatile的使用
- const c
- JVM-由常量池 运行时常量池 String intern方法想到的(三)之String内存模型
- hbase协处理器
- 下决心,努力准备找工作~
- window下redis的安装及使用
- 软件系统设计思路
- C/C++函数形参包含字符&以及const
- redis -- 信号量
- Android get/ post 方法 传递网络数据 -简单的翻译功能实现(GET)
- 反射
- 关系数据库~SQL server
- Spring3- Spring AOP——自动创建Proxy
- ArcGIS多个面合并再后拆散
- 【Unity】开发日志3——拖尾渲染 Trial Renderer
- 在Mac上关于tomcat服务器的安装、配置、启动、部署web详细流程