【问题标题】:returning reference to private vs public member返回对私有与公共成员的引用
【发布时间】:2015-06-08 19:30:50
【问题描述】:

我想知道提供一个返回引用而不是公开成员的公共访问方法可能是什么原因。 QPoint 有方法 int& rxint& ry 可以让我直接操作坐标。

我猜它的实现看起来是这样的:

public:
    int& rx(){return x;}
private:
    int x;

到目前为止,我唯一的想法是:通过保持成员私有和“仅”提供引用,类仍然可以更改为使用不同的数据类型作为其坐标,同时仍然“以某种方式”返回引用到一个 int。然而,这个“不知何故”总是需要一个 int 成员。一旦引用泄露,成员实际上就不能再改变了。所以这不可能是原因。

related question 中,接受的答案建议宁愿公开成员而不是返回参考。

返回引用而不是公开成员有什么好处(在一般情况下)?或者这只是 Qt 特定(QPoint 特定?)设计?

编辑:QPoint in Qt4

【问题讨论】:

  • 这对于调用 C++ 的 C# 包装器很有用,因为可以使此类函数显示为属性。

标签: c++ qt reference private public


【解决方案1】:

一般来说,通过引用返回成员与拥有公共成员一样多的封装性,并且都不鼓励。

我想当一个类足够简单(普通的旧数据——预计接口和数据都不会改变)时,可以将其所有成员公开。返回非常量引用具有相同的效果。所有的封装都被破坏了。

关于你的问题,没有任何好处。

除了我的回答,类似的回答已经给出here

【讨论】:

  • 现在回想起来,很明显:引用变量(草率地说)只是一个别名。因此,它真的没有任何区别。 AndyG 可能在 C# 属性上是正确的。但是,afaik Qt 属性需要 QObject 作为超类,而 QPoint 不是这种情况。
  • 此答案假定QPoit::rx() 的实现与OP 发布的相同。
  • 为什么 Qt 实现者决定这样做,只有他们自己知道。这是一个非常简单的类,我想它与向后兼容性有关。我已经阅读了他们的文档,这似乎是一个蹩脚的借口......一些 Qt api 实现者可能会发表评论。例如,查看提升点...
  • 好吧,你们赢了,如果@tobi303 找到了代码并且它只是按照他所说的那样返回了一个引用,那么我就无法提供一个很好的例子来证明返回引用是合理的而是将该成员设为公开。
  • 引用不同于将私有成员设为公开。简单来说,引用是公共的或私有的引用,那又如何呢?引用非常有用,请阅读巨大的好处,例如在 UI 编程中,您可能有一个小部件来操作底层值。你只需要知道你在做什么,以及为什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-10
  • 1970-01-01
  • 1970-01-01
  • 2014-06-03
  • 2023-04-08
  • 2012-10-25
相关资源
最近更新 更多