[英]return const and non-const value from getter method
我在這里問了一個沒有得到滿意答復的問題,我仍在思考這個話題,所以開始這個新問題,希望我能更好地描述我的想知道的事情。
我有這樣的代碼:
struct A
{
P* get_p() const;
};
void dump_p(const A *a)
{
const P* p = a->get_p();
...... dump out p's content for debugging purpose ......
}
void re-format(A *a)
{
P* p = a->get_p();
...... update p's content ......
}
您可以看到dump_p()實際上是一個只讀函數,但是get_p()返回一個自由指針,該指針允許調用者自由更新數據。 這讓我很na,我認為解決方案編譯器可以幫助執行語義檢查。
這就是我的想法:
struct A
{
P* get_p() const;
const P* get_rdonly_p() const;
};
void dump_p(const A *a)
{
const P* p = a->get_rdonly_p();
}
void re-format(A *a)
{
P* p = a->get_p();
}
添加此get_rdonly_p(),是因為c ++不允許僅使用其他返回類型的重載方法。
我瘋了嗎? 或您的解決方案是什么?
[更新]謝謝Adrian,這可能是解決方案。 但是我仍然會碰牆-您提到的非const版本get_p()不能100%滿足我,該函數本身不會更改任何struct A,但是我沒有將其聲明為const,這是嘮叨。
讓我堅持檢查您的答案,很可能是這樣,也許c ++在語言級別缺少某些構造。
你差不多了。
struct A
{
P* get_p();
const P* get_p() const;
};
這取決於A
是否為const來重載get_p
。 如果A
為const,則直接訪問指針的調用者應該不能更改它。 非const版本不會直接修改A
,但它允許調用者通過返回的指針進行修改。
這是具有直接訪問器的庫中的常見模式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.