線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:844
推到 Plurk!
推到 Facebook!

const 一問

尚未結案
polongkon
一般會員


發表:8
回覆:19
積分:5
註冊:2004-04-16

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-01-12 17:42:24 IP:61.219.xxx.xxx 未訂閱
我們知道const有『唯讀』的功能,但是若以 virtual m_struct* function_01() const; 這個const是什麼意義? 各位大大 可否解答 謝謝....
fffhghgjh
一般會員


發表:2
回覆:33
積分:17
註冊:2004-12-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-01-12 18:16:20 IP:61.220.xxx.xxx 未訂閱
假設
class test{
    virtual m_struct* function_01() const;
};
function_01是test的成員函數 則function_01便不能修改所引用的物件(test)
polongkon
一般會員


發表:8
回覆:19
積分:5
註冊:2004-04-16

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-01-13 15:19:54 IP:61.219.xxx.xxx 未訂閱
這樣我還是看不懂ㄟ,假使說
 
class test{
    function_01() const {  }
};    test *class_t1, *class_t2;
這樣test類別所產生物件class_t1、class_t2 皆無法引用function_01()。 fffhghgjh大大所說: > 則function_01便不能修改所引用的物件(test) 是什麼意思勒.....看不懂,可以再說清楚一點嗎? 謝謝。感恩
fffhghgjh
一般會員


發表:2
回覆:33
積分:17
註冊:2004-12-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-01-13 19:11:23 IP:61.220.xxx.xxx 未訂閱
class test{
    int i;
public:
    function_01(int x) const
    {
        i=x;//this function is illegal
    }
    int function_02() const
    {
        return i;//this function is OK
    }
};
 
pwipwi
版主


發表:68
回覆:629
積分:349
註冊:2004-04-08

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-01-13 22:08:29 IP:211.76.xxx.xxx 未訂閱
polongkon你好: 我想你應該聽過this指標吧?一般在member function後面加上const,可以想成是把"this"指標宣告成 "const MyClassType* this" this宣告成const後,就無法透過他修改class的data member,而且只能呼叫同樣是const的成員函式。 加上const的好處是,增加程式的整體讀寫邏輯限制,靠compiler的警示讓你可以發現潛在的bug。 以一個例子來說:如果你的class中有一個getPosition函式,在設計前假設:"getPosition時不會修改到class本身"。萬一實作這個函式時不小心做了寫入的相關指令(比如修改了class中的資料)。這個邏輯上的錯誤會留到測試時才發現bug,而且發生bug時還要經過很麻煩的步驟才會找出錯誤是在getPosition裡面。要是一開始就加上const,這個runtime的錯誤會提早在compiler time被發現,大大節省維護和測試的時間。 有人會想:這麼簡單的假設,怎麼可能會出錯?事實上物件設計時,讀寫限制的邏輯可能可以弄的很複雜,一個緊咬一個。有const的幫助對大物件的維護有不少的功勞。我就常從const中,找到設計的錯誤,而且這些錯誤如果不加const,通常都要到軟體測式時才發現...會花上不少的成本。 因此我聽過有不少人建議,"如果你class裡的function可以加上const。請務必要加上const"!!
系統時間:2024-06-26 22:13:05
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!