這裡討論的是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_); }
全站熱搜