1. 程式人生 > >void fun() const{}; const void fun(){}; 和void const fun(){}; 的區別?

void fun() const{}; const void fun(){}; 和void const fun(){}; 的區別?

        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=fun1(); //錯誤,必須是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

  {

  public:

  R():num1(1){}

  int sum1(int a)const

  {

  // num1=10; //錯誤,不可以修改非static資料成員

  return a+num1;

  }

  int sum2(int a)const

  {

  num2=2; //正確,修改static資料成員

  return a+num2;

  }

  int sum3(int a) //沒有const

  {

  num1=10; //正確,修改非static資料成員

  num2=20; //正確,修改static資料成員

  return a+num1+num2;

  }

  private:

  int num1;

  static int num2;

  };

  int R::num2=0;

  int main()

  {

  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;

  return 0;

  }