Когда моя перегруженная функция может быть вызвана с помощью const художественного оформления? - PullRequest
0 голосов
/ 13 января 2020

В приведенном ниже коде у меня есть две begin() функции. Когда вызывается вторая (const) версия? Причина, по которой я спрашиваю, состоит в том, что вектор STL имеет схожие характеристики, но его можно правильно вызвать. Я ожидаю, что строка abc.begin(); вызовет const версию функции begin, но этого не произошло.

#include <vector>
using namespace std;

class test {
 public:
  test(vector<int> const &x) : a{x} {};
  test(vector<int> &x) : b{x} {};
  vector<int> begin() {
    cout << "int begin() is called" << endl;
    return b;
  }
  const vector<int> begin() const {
    cout << "int const begin() const is called" << endl;
    return a;
  }
 private:
  const vector<int> a;
  vector<int> b;
};

int main() {
  vector<int> b{1, 2, 3, 4, 5};
  const vector<int> a{4, 5, 6, 7, 8};
  test abc{a};
  test bcd{b};
  bcd.begin();
  abc.begin();
  return 0;
}

Примеры кода из вектора STL

    iterator begin() _NOEXCEPT
        {return __make_iter(0);}
    const_iterator begin() const _NOEXCEPT
        {return __make_iter(0);}

Ответы [ 2 ]

2 голосов
/ 13 января 2020

Теперь я понял это. Чтобы использовать функцию-член const, нам нужно объявить экземпляр как константу, то есть

const test abc {a};

0 голосов
/ 13 января 2020

постоянный объект, используемый для вызова только константной функции-члена.

...