void fun() const{}; const void fun(){}; 和void const fun(){};

转:http://blog.csdn.net/zimingjushi/article/details/6716269

               (0 0)
   +-----oOO----(_)----------+
   |                                   |
   |                                   |
   |                                   |
   +------------------oOO----+
              |__|__|
               || ||
              ooO Ooo

const void fun(){};和void const fun(){};两个相同。
如果采用"按址传递方式"的函数返回值加const 修饰,那么函数返回值(即地址)的内容不能被修改,该返回值只能被赋给加const 修饰的同类型指针。
如果采用"按值传递方式"的函数返回值加const 修饰,由于函数会把返回值复制到外部临时的存储单元中,加const 修饰没有任何价值。
所以不要尽量不要把int fun2();写成const int fun2(); 因为没意义。例:

 

#include<iostream>
using namespace std;
int num = 10;//全局变量
const int *fun1()
{
    return &num;//返回地址
}

const int fun2()//按值传递,最后写成int fun2()
{
    return num;
}

int main()
{
    const int *fun1();
    //int *t1 = fun2();//错误,必须是const型
    const int *t1 = fun1();
    //*t1 = 20;//按址传递,不能修改其只想变量或常量的值
    cout << "const int *fun1() : \t" << *t1 << endl;
    const int fun2();//最好直接声明成int fun2()
    int t2 = fun2();//非const变量可以更改函数返回值
    const int t3 = fun2();
    t2 += 10;//按值传递,可以修改返回值
    cout << "const int fun2() :\t" << t2 <<endl;
    return 0;
}
 

 

 void fun() const{};
类的成员函数后面加 const,表明这个函数不可以对这个类对象的数据成员(准确地说是非static数据成员)作任何改变例:

#include<iostream>
using namespace std;
class R
{
private:
    int num1;
    static int num2;
public:
    R():num1(1) {}
    int sum1(int a)const
    {
        return a + num1;
        //num1 = 10,错误,不可以修改非static数据成员
    }

    int sum2(int a)const
    {
        num2 = 2;//正确,可以修改sattic数据成员
        return a + num2;
    }

    int sum3(int a)
    {
        num1 = 10;//正确,修改非static数据成员
        num2 = 20;//正确,修改sattic数据成员
        return a + num1 + num2;
    }



};

int R::num2 = 0;
int main()
{
    R t;
    cout << "t.sum1(1):\t" << t.sum1(1) << endl;
    cout << "t.sum2(1):\t" << t.sum2(1) << endl;
    cout << "t.sum3(1):\t" << t.sum3(1) << endl;
}

 

 

 

你可能感兴趣的:(Const)