先給出一段代碼函數
class A { int *x; public: int *f() const { return x; } };
成員函數f
返回指向私有成員 x
的很是量指針,我認爲這會修改爲員x
,對吧?指針
f
是 const
成員函數,我應該在返回類型前面添加 const
嗎?code
const
成員函數應該保證的是,它不能更改任何數據成員。class
就我而言,函數 f
並無修改類A
的數據成員x
,但能夠修改x
指向的內容,因此個人問題是,這是否違反了const
函數應保證的內容?引用
const
成員函數只能返回 指向成員的const
指針或引用。數據
可是,您的示例未返回指向成員的指針;它返回的剛好是指針成員的副本。在 const
成員函數中容許這樣作(即便指針碰巧指向另外一個成員)。co
這將不會被容許(請注意,它如今正在返回引用):return
int *&f() const { return x; }
但這能夠(返回 const
引用):const
int *const &f() const { return x; }