const的用法 part 2

  • 1763
  • 0
  • c++
  • 2010-11-20

How to use "const". Part 2

接續上篇

這裡討論的是const在成員函式中的用法

 

1. const用在成員函式傳入變數的地方,這是一個很常看見的寫法

	

class ClassA { public: ClassA(){} void Method1(const char* pcName) { char acModify_[10]; ::memset(acModify_, 0, sizeof(acModify_)); ::strcpy(acModify_, "change 1"); //::strcpy(pcName, acModify_); ::printf("%s\n", pcName); } void Method2(const char* pcName) { char acModify_[10]; ::memset(acModify_, 0, sizeof(acModify_)); ::strcpy(acModify_, "change 2"); pcName = acModify_; ::printf("%s\n", pcName); } };

 

這邊請注意

Method1如果將註解拿掉

在編譯時是不會成功的

但是Method2會成功

而且const執行時也可以被修改

使用時請小心

至於如何防範這個問題

請參照part 1

 

 

2. const加在成員函式的後面

		class ClassB
{
public:
    ClassB():_iCount(0)    {}
    
    int Method1()const
    {
        //_iCount ++; // 如果此行不注解是無法編譯的
        return _iCount;    
    }

    int Method2()
    {
        _iCount ++;
        return _iCount;    
    }

private:
    int _iCount;

};

 若再成員函式後面加上const

則此函式只能回傳資料

不能變動資料

 

3. const加在成員函式的前面

	

class ClassC { public: ClassC() { ::memset(_acName, 0, sizeof(_acName)); ::strcpy(_acName, "default"); } const char* Method1() { return _acName; } private: char _acName[20]; }; int _tmain(int argc, _TCHAR* argv[]) { ClassC mClassC_; // 這裡一定要用const才能接收, 所以自然也不能去修改值 const char* pcResult_ = mClassC_.Method1(); ::printf("%s\n", pcResult_); }