void fun()const{}const void fun(){}とvoid const fun(){}

2575 ワード

回転:http://blog.csdn.net/zimingjushi/article/details/6716269
               (0 0)
   +-----oOO----(_)----------+
   |                                   |
   |                                   |
   |                                   |
   +------------------oOO----+
              |__|__|
               || ||
              ooO Ooo
const void fun(){}とvoid const fun(){}二つは同じです「アドレス伝達方式」の関数戻り値にconst修飾を加えると、関数戻り値(すなわちアドレス)の内容は変更されず、その戻り値は、const修飾された同タイプのポインタにのみ割り当てられる。「値伝達方式」の関数戻り値にconst修飾を加えると、関数が外部の一時的な記憶ユニットに戻りますので、const修飾は価値がありません。だからできるだけしないでください。const int fun 2();意味がないからです。例:
 
#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;
}