【问题标题】:Operator overload with a reference return in C++ class在 C++ 类中具有引用返回的运算符重载
【发布时间】:2018-09-07 07:34:18
【问题描述】:

这两个函数有什么区别?

double &operator[](size_t i) { return features_[i]; }
double operator[](size_t i) const { return features_[i]; }

1,第一个允许修改features_[i],第二个不行?

2,我写Mytype[i] = 0double x = Mytype[i]时会选择哪个算子?

【问题讨论】:

  • 1) 是的。 2) 取决于Mytype 实例是否为const。在这两种情况下。
  • 如果我将Mytpe 声明为const
  • 我的评论应该已经暗示了答案,但是由于第二个重载被标记为const,它将被选择用于const 实例,而非const 方法(第一个重载)将被选择用于非const 实例。
  • 如果我只提供第一个函数,const Mytype 尝试修改返回值是否有风险?或Mytype 之前的const 将保证Mytype 不会分配features_
  • 如果您只提供第一个重载,那么如果您尝试在 const 对象上调用它,它将不会被调用,因为编译器只会寻找 const 方法。这就是它们的全部目的——在 const 对象上调用。您为什么不只是: 1) 自己尝试这些问题,并观察编译器给您带来的错误? 2) 考虑向good C++ book学习?

标签: c++ operator-overloading


【解决方案1】:

1) 是的。请注意,第二个(const)返回一个副本(按值返回),可以修改,但不会修改Mytype中的原始。

2) 它完全取决于Mytype 的常量。但是,double x = Mytype[i] 在任何一种情况下都会生成副本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-09
    • 1970-01-01
    • 2011-01-13
    • 1970-01-01
    • 1970-01-01
    • 2015-01-29
    • 1970-01-01
    • 2012-04-26
    相关资源
    最近更新 更多