簡體   English   中英

從getter方法返回const和非const值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM