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