void fun()const{}const void fun(){}とvoid const fun(){}
2575 ワード
回転:http://blog.csdn.net/zimingjushi/article/details/6716269
void fun()const{}クラスのメンバー関数の後にconstを追加すると、この関数はこのクラスのオブジェクトのデータメンバー(正確には非staticデータメンバー)に対して任意の変更例をしてはいけないことを示しています。
(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 #//
}
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;
}