3 回答

TA貢獻1906條經驗 獲得超10個贊
const
在函數(shù)聲明之后用關鍵字表示的“const函數(shù)” 使得此類函數(shù)的編譯器錯誤更改了類的成員變量。但是,在函數(shù)內部讀取類變量是可以的,但是在函數(shù)內部寫入會產生編譯器錯誤。
考慮這種“const函數(shù)”的另一種方法是將類函數(shù)視為采用隱式this
指針的普通函數(shù)。所以一個方法int Foo::Bar(int random_arg)
(最后沒有const)會產生一個類似的函數(shù)int Foo_Bar(Foo* this, int random_arg)
,并且調用Foo f; f.Bar(4)
會在內部對應類似的東西Foo f; Foo_Bar(&f, 4)
。現(xiàn)在,在end(int Foo::Bar(int random_arg) const
)處添加const 可以理解為帶有const this指針的聲明:int Foo_Bar(const Foo* this, int random_arg)
。由于this
在這種情況下的類型是const,因此不可能修改成員變量。
可以放寬不允許函數(shù)寫入類的任何變量的“const函數(shù)”限制。為了允許某些變量可寫,即使函數(shù)被標記為“const函數(shù)”,這些類變量也會用關鍵字標記mutable
。因此,如果一個類變量被標記為可變,并且“const函數(shù)”寫入該變量,那么代碼將干凈地編譯并且變量可以更改。(C ++ 11)
像往常一樣,在處理const
關鍵字時,在C ++語句中更改const關鍵字的位置具有完全不同的含義。上述用法const
僅適用于在const
括號后添加到函數(shù)聲明的末尾時。
const
在C ++中是一個高度過度使用的限定符:語法和順序通常與指針結合使用并不簡單。一些關于const
正確性和const
關鍵字的讀數(shù):

TA貢獻1863條經驗 獲得超2個贊
考慮兩個類類型變量:
class Boo { ... };
Boo b0; // mutable object
const Boo b1; // non-mutable object
現(xiàn)在,您可以調用on的任何成員函數(shù),但只能調用成員函數(shù)。Boob0constb1
- 3 回答
- 0 關注
- 835 瀏覽
添加回答
舉報