2011年11月14日 星期一

const的意義(const pointer, pointer to const, const pointer to a const, const function...)

#include
#include
using namespace std;
class A
{
private:
     int y;
public:
 A(){
  y=0;
 }
 int f1(int x) const // 此const代表此function不可以修改Data Member
 {
  x++;
  // y++; // Error! y為Data Member,因此不可以修改
  return y;
 }
 const int f2(int x) // 回傳值為const
 {
  x++;
  y++;
  return y;
 }
 int f3(int const x) // 參數為const
 {
  // x++; // Error! x為const,不可以修改
  y++;
  return y;
 }
 void f4(int const *x) // x is variable pointer to a constant integer,也可以寫成f4(const int *x)
 {
  // (*x)++; // Error! pointer x所指向的實體為const,因此不可以修改其值
  *x++; // 此行的意思是*(x++),先修改pointer x的值,在指向實體
 }
 void f5(int const &x) // x is variable reference to a constant integer
 {
  // x++; // Error! x就是一個const
 }
 void f6(int *const x) // x constant pointer to a variable integer
 {
  (*x)++;
  // *x++; // Error! Constant pointer x 不可以指向其他實體
 }
 const char * f7() // 回傳一個variable pointer to a constant char
 {
  return "ABC";
 }
 void f8(const int * const x) // x is constant pointer to a const integer
 {
  // (*x)++; // Error! x所指向的實體為const,因此不可以修改其值
  // *x++; // Error! Constant pointer x 不可以指向其他實體
 }
};
int main(){
 A a;
 int x=3;
 a.f1(x);
 a.f2(x);
 a.f3(x); // int x 會自動轉成const int x傳入
 a.f4(&x) ;
 a.f5(x) ;
 const char *s = a.f7(); // 必須使用一個const來接const
 // s[0]='0'; // Error! 無法對const 變數進行改變動作
 return 0;
}

Reference: http://csie-tw.blogspot.com/2010/03/c-constconst-pointer-pointer-to-const.html

沒有留言:

張貼留言