请教一下,c++中能通过const修饰符来保证实参指向的对象不能更改:
例如:int binary_search(const List<Record> &the_list,const Key &target)c#中有类似的功能吗,例如:int binary_search(List<Record> the_list,Key target)
如果确保对象the_list和target不会被修改?
例如:int binary_search(const List<Record> &the_list,const Key &target)c#中有类似的功能吗,例如:int binary_search(List<Record> the_list,Key target)
如果确保对象the_list和target不会被修改?
解决方案 »
- 问题有点难,baidu。google.都没有用。
- 请大家帮忙看看这个程序是怎么执行的,谢谢
- 想做个Windows Media ASF Indexer 这样的程序?请问有什么资料吗?
- 不读入内存,如何向XML中追加数据
- 声明一个oledbconnect dbconnect1,在代码中dbconnect1.open(),但没有提供.close(),也没有用using
- 异步socket 客户端怎么捕捉beiginConnet的错误?怎么判断服务器能否连接上?
- WinForm 用户身份检测的问题!!
- DllImport时出现System.NullReferenceException: 未将对象引用设置到对象的实例的错误 ,急盼热心人来发表意见
- 一个MP3播放的问题,困惑中!!!
- C# OpenFileDialog怎么过滤不掉网页的快捷方式
- IntelliTrace.exe 这个进程是怎么回事
- 关于统计的一个问题(统计编号范围)
对于值类型,如果不使用ref /out则传递的只是这些值的COPY使用了Ref和Out的效果就几乎和C中使用了指针变量一样。(传递的就是原值),它能够让你直接对原数进行操作,而不是对那个原数的Copy进行操作对于引用类型,如果不使用ref /out,因为传递的是引用类型的地址值,则将传递引用类型的地址值的一个COPY(--针对地址值的角度还是值类型传递),实际上就是新开一个不同的内存变量来存储这个地址值的拷贝而使用ref /out,传递的还是引用类型的地址值,但是传递的就不是一个新变量来存拷贝,而是就是传原来的那个应用类型的地址值
在c++中:const List<Record> &the_list指的是不能修改the_list的数据成员,而不是指向。
换个例子吧,这样和c#比较相对更加贴切
在c++中:int binary_search(const List<Record> *the_list,const Key *target),可以保证指针指向的对象不能修改,只作为输入然后执行相关操作输出相应结果。c#由于垃圾回收的原因,语法更加简洁,*the_list就可以写成the_list,叫做引用,但如何保证引用指向的对象不被修改能,ref和out就是两个意思,和const不是一回事啊- -
2)C#中,const修饰的全局变量或局部变量必须在声明的时候初始化,因为是静态,所以无法使用构造方法初始化,当需要调用const修饰的全局变量时,可以通过类直接调用,但const修饰的局部变量则无法通过类调用,并且作用范围只能为局部.
3)readonly修饰的全局变量可以在声明时初始化,也可以在构造方法中被初始化,如果readonly所修饰的全局变量在两个地方都初始化了, 那么最后这个全局变量的值是在构造方法中被初始化, readonly可以在全局变量和构造方法中同时初始化
C#默认是按值传递,如果传值类型的参数,进去不会改变
但传进去参数是引用类型(非string类型),传进去的是指针,在方法内可以操作对象,但不能改变对象的引用。