请教一下,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不会被修改?

解决方案 »

  1.   

    看你怎么理解了,const List<Record> &the_list中不能修改是指不能改变the_list的指向,而不是不能改变其中添加的项c#中应该默认是不能修改的,如果要修改,需要加 ref或out
      

  2.   

    NET Ref和Out关键字
    对于值类型,如果不使用ref /out则传递的只是这些值的COPY使用了Ref和Out的效果就几乎和C中使用了指针变量一样。(传递的就是原值),它能够让你直接对原数进行操作,而不是对那个原数的Copy进行操作对于引用类型,如果不使用ref /out,因为传递的是引用类型的地址值,则将传递引用类型的地址值的一个COPY(--针对地址值的角度还是值类型传递),实际上就是新开一个不同的内存变量来存储这个地址值的拷贝而使用ref /out,传递的还是引用类型的地址值,但是传递的就不是一个新变量来存拷贝,而是就是传原来的那个应用类型的地址值
      

  3.   

    引用类型的内容 默认情况下(不加ref,out)也会被修改。。保存处理前的对象,然后重新赋值 ,这样也行
      

  4.   

    汗,你们都没有理解我的意思啊!!!
    在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不是一回事啊- -
      

  5.   

    那么声明为ReadOnly变量可以吗?    1)C#中,const可以修饰全局变量和局部变量,但readonly只能修饰全局变量
        2)C#中,const修饰的全局变量或局部变量必须在声明的时候初始化,因为是静态,所以无法使用构造方法初始化,当需要调用const修饰的全局变量时,可以通过类直接调用,但const修饰的局部变量则无法通过类调用,并且作用范围只能为局部.
        3)readonly修饰的全局变量可以在声明时初始化,也可以在构造方法中被初始化,如果readonly所修饰的全局变量在两个地方都初始化了, 那么最后这个全局变量的值是在构造方法中被初始化, readonly可以在全局变量和构造方法中同时初始化 
      

  6.   

    不能确保不被改变,要想别的办法,比如把不希望被修改的值设成readonly
    C#默认是按值传递,如果传值类型的参数,进去不会改变
    但传进去参数是引用类型(非string类型),传进去的是指针,在方法内可以操作对象,但不能改变对象的引用。