【问题标题】:Why is this method called instead of the other? [duplicate]为什么调用这个方法而不是另一个? [复制]
【发布时间】:2015-06-10 06:12:41
【问题描述】:

我有这个特定的代码示例:

 struct ComplexNumber {
      float  _Re, _Im;
     public:
      float  Re() const { return _Re; }
      float& Re()       { return _Re; }

      float  Im() const { return _Im; }
      float& Im()       { return _Im; }
    };

我想知道为什么,当我表演时

ComplexNumber Num1;
cout << Num1.Re() << endl;

正在调用方法float&amp; Re() { return _Re; },而不是

float Re() const { return _Re; } 似乎已经准备好通过使用 const 保护数据来执行 cout。

【问题讨论】:

标签: c++ methods reference constants


【解决方案1】:

正在调用最佳匹配函数,因此如果您同时具有 const 和非 const 版本,则将在非 const 对象上调用非 const 版本。

如果你有一个 const 对象(或指针或引用)

const ComplexNumber Num1;
cout << Num1.Re() << endl;

然后float Re() const { return _Re; } 将被调用。

【讨论】:

  • 我可以删除 float&amp; Re() { return _Re; } 并再次执行此操作 - 将调用 const 方法
  • @threaz:因为它是唯一可以调用的函数。不是吗?
  • @threaz 你是对的,我不知道。猜猜当时正在调用最佳匹配函数。实际上想想,我知道,因为我使用它们 :) 我知道如果你同时拥有 const 版本,则只会在 const 对象(或指针或引用)上调用。
猜你喜欢
  • 1970-01-01
  • 2015-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-13
  • 1970-01-01
相关资源
最近更新 更多