void fun() const{}; const void fun(){}; 和void const fun(){}; 的區別?
阿新 • • 發佈:2019-02-05
const void fun(){};和void const fun(){};兩個相同。
如果採用"按址傳遞方式"的函式返回值加const 修飾,那麼函式返回值(即地址)的內容不能被修改,該返回值只能被賦給加const 修飾的同類型指標。
如果採用"按值傳遞方式"的函式返回值加const 修飾,由於函式會把返回值複製到外部臨時的儲存單元中,加const 修飾沒有任何價值。
所以不要儘量不要把int fun2();寫成const int fun2(); 因為沒意義。
例:
void fun() const{};
如果採用"按址傳遞方式"的函式返回值加const 修飾,那麼函式返回值(即地址)的內容不能被修改,該返回值只能被賦給加const 修飾的同類型指標。
如果採用"按值傳遞方式"的函式返回值加const 修飾,由於函式會把返回值複製到外部臨時的儲存單元中,加const 修飾沒有任何價值。
所以不要儘量不要把int fun2();寫成const int fun2(); 因為沒意義。
例:
#include<iostream> using namespace std; int num=10; //全域性變數 const int *fun1(){ //按址傳遞 return # //返回地址 } 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; }