#include <vector>
#include <iostream>
using namespace std;
int main()
{
vector<int> coll;
decltype(std::begin(std::declval<vector<int>>()))
pos_1 = coll.begin();
auto pos_2 = coll.begin();
cout << typeid(decltype(pos_1)).name() << endl;
cout << typeid(decltype(pos_2)).name() << endl;
}
Mój kompilator to clang 4.0. Wyjście jest:Dlaczego "std :: begin()" zawsze zwraca "const_iterator" w takim przypadku?
class std::_Vector_const_iterator<class std::_Vector_val<struct std::_Simple_types<int> > > class std::_Vector_iterator<class std::_Vector_val<struct std::_Simple_types<int> > >
To znaczy: pos_1 = pos_2;
jest ok, natomiast pos_2 = pos_1;
nie jest w porządku.
Dlaczego w takim przypadku std::begin()
zawsze zwraca const_iterator
zamiast iterator
?
Domyślam się, że to dlatego, że to dlatego, że jesteś wnioskowanie typu 'pos_1' korzystając tymczasowy. Wiążą się tylko ze stałymi referencjami i tym wszystkim, w którym pojawia się konsta w grze. – Borgleader