繁体   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