В приведенном ниже коде у меня есть две 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);}