C#与c++函数传递参数的比较
来源:互联网 发布:南京seo哪家好 编辑:程序博客网 时间:2024/06/06 09:34
转自:http://blog.csdn.net/sxbluebird/archive/2008/05/30/2496704.aspx【C++, C#】
值传递: 当调用的时候,发生了值拷贝,即函数的形参仅仅是用实参初始化了的副本; 这个形参,仅仅在函数内部有效,出了函数体,则自动失效。
引用传递:实际上,传递过去的实参的内存heap里面的地址, 自然在函数里面使用形参,改变的也就是heap里面的东西。就算函数里面的形参,出了函数体失效,那么heap里面的值实际上已经在函数里面修改了,达到了效果。
在C++里面, 默认都是按照值传递,除非声明函数的时候,使用了&来标识是要用引用来传递。
对于数组,另外处理, 传递过去的都是数组的头元素的地址。所以函数不要写成:
Void PrintArray(int intArray[10])
这样默认给用户提示,这个数组是10个元素, 实际上仅仅有个首地址,其他的事不知道的。
Void PrintArray(int* intArray, int count)
这样才对,告诉用户有多少个元素在里面。
如果仅仅read, 不需要函数做修改的话,最好加上 const:
Void PrintArray(cosnt int* intArray, int count)
效率: 值传递需要拷贝,所以需要更多一些时间。
我做了一个试验:
直接传递vector: 9594ms
引用传递vector: 9534ms
20次,省60ms,效率上还是有区分的。
在C#里面, 默认都是按照声明的形参来做的:形参为class、引用类型的,按照引用类型来传递; 形参为struct、值类型的, 按照值拷贝传递。
所以,C#在处理这些的时候,效率都差不多,比C++差一些。 但实际使用上简单的多。
关键字ref, out就是为了模仿C++里面的&传递的。
Ref: 实参在使用前申明,并初始化, 在函数体里面-形参直接使用。
Out: 实参申明一下即可, 在函数体里面-形参里面初始化,再使用。
Ref, out在编译情况下是一样的,所以不能重载ref, out。仅仅在runtime才有区别。
Void printValue(ref int intValue);
Void PrintValue(out int intValue);
在同一个类里面出现,编译器会报:
error CS0663: cannot define overloaded methods that differ only on ref and out
使用C#的人享受一些编程快感,程序运行效率差些。
使用C++的人,享受编程苦感, 程序运行效率高些。
如此而已。
- C#与c++函数传递参数的比较
- C++与JAVA函数参数传递的比较
- c# 中的参数传递,以及与JAVA参数传递的比较。.
- C# - 函数参数的传递
- c函数的参数传递
- C函数的参数传递
- c#-函数的参数传递
- C#-函数参数的传递
- qsort的比较函数传递参数注意事项
- 图解C/C++中函数参数的值传递、指针传递与引用传递
- 图解C/C++中函数参数的值传递、指针传递与引用传递
- JAVA C# C/C++之比较学:参数传递
- C与Python函数参数传递总结
- c指针与函数参数传递方式
- C#语言函数参数的传递
- C#中使用OpenGL:(六)C#中调用C函数时的参数传递问题
- C函数参数传递与返回值传递
- 函数的参数传递与内联函数
- Android Bitmap 图片处理细节
- 軟考之他人見過關經驗
- Jetty配置自动更新反馈
- C++与C#的数据类型转换
- oracle数据库配置修改 Oracle数据库监听程序启动不了解决方案
- C#与c++函数传递参数的比较
- 在IIS7.5 中配置SSAS通过HTTP远程连接
- C++输出流的格式控制
- 使用ADOMD.NET建立与Analysis Services的连接
- Asterisk的安装和使用
- Ruby学习札记(3)- Ruby中gem的安装与卸载
- jQuery相关
- 0530
- PPP协议简要分析