欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-07-09 21:46:49
...

转: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