【问题标题】:overload square bracket operator with private nested class使用私有嵌套类重载方括号运算符
【发布时间】:2014-02-18 08:42:24
【问题描述】:

我想使用私有嵌套类重载方括号运算符 [] 以区分 v[i] = val 和 val = v[i]

【问题讨论】:

  • 如果写val2 = v[i] = val1应该调用哪一个?
  • 对你有好处。到目前为止,您尝试了什么,遇到了什么问题?
  • 如果它仍然是一个私有嵌套类,为什么不提供名称清楚描述(副作用)的方法,而不是提供一些晦涩难懂的方法-on-where-you-put-it 行为?
  • 就这样吧。这是一个常用的成语。
  • 如果你要问班级需要做什么,那么你需要一个赋值运算符作为第一个,一个转换运算符作为第二个。如果您要问其他问题,请以问题的形式提出您的问题。

标签: c++ operator-overloading nested-class square-bracket


【解决方案1】:

您不需要私有嵌套类来区分这些情况。只需制作一个 const。

 public:
     T& operator[](size_t index);
     const T& operator[](size_t index) const;

如果这样做,const 变量将用于 const 右侧的情况,而非 const 变量将用于分配给左侧的元素。

【讨论】:

  • 否,它区分它是否应用于const对象,而不是是否分配返回值。
  • @MikeSeymour,对,这就是我说“const”右手边的原因。 (如果右侧是非常量,则将使用非常量变体)。但我想这是 OP 真正需要的。
  • 不,这行不通,因为作业的 RHS 上可能有 const 或非const 实例。
猜你喜欢
  • 2017-08-15
  • 1970-01-01
  • 2020-02-08
  • 1970-01-01
  • 2013-09-20
  • 1970-01-01
  • 1970-01-01
  • 2014-10-11
  • 2010-09-22
相关资源
最近更新 更多