C++常函数问题请教我前几天看了一个网上关于C++的资料,今日上上不去了,有个问题当时一知半解,由于没有原题,现在写出大意,请大家指点:
一个函数定义后边加一个const,我不知道加这个参数对为函数有什么影响?下边我试写一个,也许语法有问题,关键我当时有事,没有认真看原文,请大家谅解:int p(int a) const  这样的函数体内什么参数不能被修改?const的意义何在,谢谢了。

解决方案 »

  1.   

    int p(int a) const
    它会告诉编译器:帮我看着a这个参数,它是不能在函数内被修改的,如果它要被修改,吱个声;
    同时告诉这个方法的使用者:在p方法内部,我可以保证a是不会被修改的,兄弟你可以放心用它!
      

  2.   

    楼上的朋友的回复如下:
    比如说你在类A里面定义了一个这种函数,那么在这个函数的实现过程中不可以修改
    函数的参数的值以及类A里面的成员变量的值,如果修改的话,会报错的
    我想问在类里边有成员int b,c d;如果int p(int a) const是类里边的函数,那么P就不能修改a\b\c\d中的任意一个对吗?
    class tt
    {
    pbulic:
    int b,c,d;
    int p(int a) const;
    }
      

  3.   

    const 成员函数不能修改对象 需要注意的是 如果成员是个指针 比如 char *b b指向的内容是可以改变的。
      

  4.   

    http://community.csdn.net/Expert/topic/3489/3489281.xml?temp=.2709009
    http://community.csdn.net/Expert/topic/3489/3489195.xml?temp=.8393061
    这是我的两个新问题,请高手指点。
      

  5.   

    const 使用情况分类详析 1.const 用于指针的两种情况分析: 
     int const *a;  file://a可变,*a不可变 
     int *const a;  file://a不可变,*a可变    分析:const 是一个左结合的类型修饰符,它与其左侧的类型修饰符和为一个类型修饰符,所以,int const 限定 *a,不限定a。int *const 限定a,不限定*a。 2.const 限定函数的传递值参数:  void fun(const int var);   分析:上述写法限定参数在函数体中不可被改变。由值传递的特点可知,var在函数体中的改变不会影响到函数外部。所以,此限定与函数的使用者无关,仅与函数的编写者有关。 
    结论:最好在函数的内部进行限定,对外部调用者屏蔽,以免引起困惑。如可改写如下: void fun(int var){ 
    const int & varalias = var; varalias .... ..... }  3.const 限定函数的值型返回值: const int fun1();  const myclass fun2();  分析:上述写法限定函数的返回值不可被更新,当函数返回内部的类型时(如fun1),已经是一个数值,当然不可被赋值更新,所以,此时const无意义,最好去掉,以免困惑。当函数返回自定义的类型时(如fun2),这个类型仍然包含可以被赋值的变量成员,所以,此时有意义。 4. 传递与返回地址: 此种情况最为常见,由地址变量的特点可知,适当使用const,意义昭然。 5. const 限定类的成员函数: class classname {  public:   int fun() const;  ..... }   注意:采用此种const 后置的形式是一种规定,亦为了不引起混淆。在此函数的声明中和定义中均要使用const,因为const已经成为类型信息的一部分。 获得能力:可以操作常量对象。 失去能力:不能修改类的数据成员,不能在函数中调用其他不是const的函数。转载自:http://www.chinaunix.net/jh/23/143183.html