#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;
}
Trình biên dịch của tôi là clang 4.0. Đầu ra là:Tại sao "std :: begin()" luôn trả về "const_iterator" trong trường hợp này?
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> > >
Điều đó có nghĩa: pos_1 = pos_2;
là ok, trong khi pos_2 = pos_1;
không phải là ok.
Tại sao std::begin()
luôn trả lại const_iterator
thay vì iterator
trong trường hợp này?
tôi đoán là nó vì đó là bởi vì bạn đang suy diễn ra kiểu của 'pos_1' sử dụng tạm thời. Chúng chỉ liên kết với tham chiếu const và tất cả những thứ đó, đó là nơi const đến trong vở kịch. – Borgleader