#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;
}
Mon compilateur est clang 4.0. La sortie est:Pourquoi "std :: begin()" renvoie-t-il toujours "const_iterator" dans un tel cas?
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> > >
Cela signifie: pos_1 = pos_2;
est ok, alors que pos_2 = pos_1;
n'est pas correct.
Pourquoi est-ce que std::begin()
renvoie toujours const_iterator
plutôt que iterator
dans un tel cas?
Je pense qu'il est parce qu'il est parce que vous êtes déduisant le type de 'l'aide d'un pos_1' temporaire. Ils se lient uniquement aux références const et tout ça, c'est là que le const vient dans le jeu. – Borgleader